{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Graphs and Networks in Linear Algebra\n",
    "\n",
    "This notebook is based on section 10.1 of Strang's *Linear Algebra* textbook.\n",
    "\n",
    "One interesting source of large matrices in linear algebra is a [graph](https://en.wikipedia.org/wiki/Graph_(discrete_mathematics), a collection of *nodes* (vertices) and *edges* (arrows from one vertex to another).   Graphs are used in many applications to represent *relationships* and *connectivity*, such as:\n",
    "\n",
    "* For computer networks, nodes could represent web pages, and edges could represent links.\n",
    "* For circuits, edges could represent wires (or resistors) and nodes junctions.\n",
    "* For transportation, nodes could represent cities and edges roads.\n",
    "* In bioinformatics, graphs can represent gene regulatory networks.\n",
    "* In sociology, nodes could represent people and edges relationships.\n",
    "* ... and many, many other applications ...\n",
    "\n",
    "In this notebook, we explain how a graph can be represented by a *matrix*, and how linear algebra can tell us properties of the graph and can help us do computations on graph-based problems.  There is a particularly beautiful connection to Kirchhoff's laws of circuit theory."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Packages for this notebook\n",
    "\n",
    "To run the code in this notebook, you'll need to install a few Julia packages used below.  To do so, uncomment the following line and run it:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Pkg.add.([\"Graphs\", \"MetaGraphs\", \"GraphPlot\", \"NamedColors\", \"RowEchelon\", Interact\", \"SymPy\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "...and then run this cell to import the packages:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.webio.node+json": {
       "children": [],
       "instanceArgs": {
        "namespace": "html",
        "tag": "div"
       },
       "nodeType": "DOM",
       "props": {},
       "type": "node"
      },
      "text/html": [
       "<div style=\"padding: 1em; background-color: #f8d6da; border: 1px solid #f5c6cb; font-weight: bold;\">\n",
       "<p>The WebIO Jupyter extension was not detected. See the\n",
       "<a href=\"https://juliagizmos.github.io/WebIO.jl/latest/providers/ijulia/\" target=\"_blank\">\n",
       "    WebIO Jupyter integration documentation\n",
       "</a>\n",
       "for more information.\n",
       "</div>\n"
      ],
      "text/plain": [
       "WebIO._IJuliaInit()"
      ]
     },
     "metadata": {
      "application/vnd.webio.node+json": {
       "kernelId": "8a9fe2d3-11ba-493f-9228-1ded0ad827a7"
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "using Interact, RowEchelon, Graphs, MetaGraphs, GraphPlot, NamedColors, LinearAlgebra\n",
    "import SymPy\n",
    "using SymPy: Sym"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Julia Graph-visualization code\n",
    "\n",
    "There are several Julia packages for manipulating graphs, e.g. [LightGraphs](https://github.com/JuliaGraphs/LightGraphs.jl), along with several packages for visualizing graphs, e.g. [GraphViz](https://github.com/Keno/GraphViz.jl).  LightGraphs is oriented towards fast and sophisticated graph computations, however, and here I just want to do some simple and pretty visualizations with simple algorithms based on those in Strang's 18.06 textbook.\n",
    "\n",
    "So, here I define a simple `MyGraph` wrapper around LightGraphs directed graphs, with metadata attached via the MetaGraphs package, for basic plotting via the GraphPlots package."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "labels (generic function with 1 method)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "struct MyGraph\n",
    "    g::MetaDiGraph\n",
    "end\n",
    "Base.copy(mg::MyGraph) = MyGraph(copy(mg.g))\n",
    "function MyGraph(edges::Pair{<:Integer,<:Integer}...)\n",
    "    g = SimpleDiGraphFromIterator(Edge(e) for e in edges)\n",
    "    MyGraph(MetaDiGraph(g))\n",
    "end\n",
    "\n",
    "using Random\n",
    "function deterministic_spring_layout(g::AbstractGraph; seed::Integer=0, kws...)\n",
    "    rng = MersenneTwister(seed)\n",
    "    spring_layout(g, 2 .* rand(rng, nv(g)) .- 1.0, 2 .* rand(rng,nv(g)) .- 1.0; kws...)\n",
    "end\n",
    "function Base.show(io::IO, m::MIME\"image/svg+xml\", mg::MyGraph)\n",
    "    show(io, m, \n",
    "         gplot(mg.g, layout=deterministic_spring_layout,\n",
    "               nodelabel=map(v -> get(MetaGraphs.props(mg.g, v), :label, v), vertices(mg.g)),\n",
    "               nodefillc=map(v -> get(MetaGraphs.props(mg.g, v), :color, \"gray\"), vertices(mg.g)),\n",
    "               edgelabel=map(ie -> get(MetaGraphs.props(mg.g, ie[2]), :label, ie[1]), enumerate(edges(mg.g))),\n",
    "               edgestrokec=map(e -> get(MetaGraphs.props(mg.g, e), :color, \"lightgray\"), edges(mg.g)),\n",
    "         ))\n",
    "end\n",
    "\n",
    "function nodecolors!(g::MyGraph, nodes::AbstractVector{<:Integer}, color::String=\"red\")\n",
    "    for n in nodes\n",
    "        set_prop!(g.g, n, :color, color)\n",
    "    end\n",
    "    g\n",
    "end\n",
    "nodecolors(g, nodes, color) = nodecolors!(copy(g), nodes, color)\n",
    "edgearr(g, e) = e\n",
    "edgearr(g, e::AbstractVector{<:Integer}) = collect(edges(g))[e]\n",
    "edgearr(g, e::AbstractVector{<:Pair}) = Edge.(e)\n",
    "function edgecolors!(g::MyGraph, edges::AbstractVector, color::String=\"red\")\n",
    "    for e in edgearr(g.g, edges)\n",
    "        set_prop!(g.g, e, :color, color)\n",
    "    end\n",
    "    g\n",
    "end\n",
    "edgecolors(g::MyGraph, edges::AbstractVector, color::String=\"red\") = edgecolors!(copy(g), edges, color)\n",
    "\n",
    "# A little code so that we can label graph nodes/edges with SymPy expressions.\n",
    "# convert strings like \"v_2 - v_0\" from SymPy to nicer Unicode strings like \"v₂ - v₀\"\n",
    "subchar(d::Integer) = Char(UInt32('₀')+d)\n",
    "subchar(c::Char) = subchar(UInt32(c)-UInt32('0'))\n",
    "subchar(s::String) = replace(s, r\"_[0-9]\" => s -> subchar(s[2]))\n",
    "labelstring(s::SymPy.Sym) = subchar(repr(\"text/plain\", s))\n",
    "labelstring(x) = x\n",
    "\n",
    "function labels!(g::MyGraph; edges=nothing, nodes=nothing)\n",
    "    if edges !== nothing\n",
    "        for (e,E) in zip(MetaGraphs.edges(g.g), edges)\n",
    "            set_prop!(g.g, e, :label, labelstring(E))\n",
    "        end\n",
    "    end\n",
    "    if nodes !== nothing\n",
    "        for (n,N) in zip(vertices(g.g), nodes)\n",
    "            set_prop!(g.g, n, :label, labelstring(N))\n",
    "        end\n",
    "    end\n",
    "    g\n",
    "end\n",
    "labels(g::MyGraph; kws...) = labels!(copy(g); kws...)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "randgraph (generic function with 1 method)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# generate a random graph with a given average #edges per node\n",
    "function randgraph(numnodes::Integer, edgespernode::Real)\n",
    "    p = edgespernode/numnodes # probability of each edge\n",
    "    e = Vector{Pair{Int,Int}}()\n",
    "    for i = 1:numnodes, j = 1:numnodes\n",
    "        if i != j && rand() < p\n",
    "            push!(e, i=>j)\n",
    "        end\n",
    "    end\n",
    "    return MyGraph(e...)\n",
    "end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "incidence (generic function with 1 method)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# returns the incidence matrix for g\n",
    "function incidence(g::MyGraph)\n",
    "    A = zeros(Int, ne(g.g), nv(g.g))\n",
    "    for (i,e) in enumerate(edges(g.g))\n",
    "        A[i,e.src] = -1\n",
    "        A[i,e.dst] = +1\n",
    "    end\n",
    "    return A\n",
    "end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "leftnullspace (generic function with 1 method)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Find the loops in g by the simplest \"textbook\" manner:\n",
    "# get a basis for the left nullspace incidence matrix.\n",
    "# We do this via the rref form, rather than nullspace(A'), because\n",
    "# we want a \"nice\" basis of ±1 and 0 entries.\n",
    "function leftnullspace(g::MyGraph)\n",
    "    A = incidence(g)\n",
    "    R = rref(Matrix(A'))\n",
    "    m, n = size(R)\n",
    "    pivots = Int[]\n",
    "    for i = 1:m\n",
    "        j = findfirst(!iszero, R[i,:])\n",
    "        j !== nothing && push!(pivots, j)\n",
    "    end\n",
    "    r = length(pivots) # rank\n",
    "    free = Int[j for j=1:n if j ∉ pivots]\n",
    "    N = zeros(Int, n, n-r)\n",
    "    k = 0\n",
    "    for (k,j) in enumerate(free)\n",
    "        N[pivots, k] = -R[1:r, j]\n",
    "        N[j, k] = 1\n",
    "    end\n",
    "    return N\n",
    "end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tree (generic function with 1 method)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# color the edges of a spanning tree of g, by the textbook\n",
    "# method of finding the pivot rows of the incidence matrix\n",
    "function pivotrows(g::MyGraph)\n",
    "    A = incidence(g)\n",
    "    R = rref(Matrix(A'))\n",
    "    m, n = size(R)\n",
    "    pivots = Int[]\n",
    "    for i = 1:m\n",
    "        j = findfirst(!iszero, R[i,:])\n",
    "        j !== nothing && push!(pivots, j)\n",
    "    end\n",
    "    return pivots\n",
    "end\n",
    "colortree(g::MyGraph, color::String=\"red\") = edgecolors(g, pivotrows(g), color)\n",
    "tree(g::MyGraph) = MyGraph(MetaDiGraph(SimpleDiGraphFromIterator(edgearr(g.g, pivotrows(g)))))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Graphs and incidence matrices\n",
    "\n",
    "Let's start by looking at an example graph with 6 nodes 8 edges.  Computers are pretty good at drawing graphs for us:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "     xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "     version=\"1.2\"\n",
       "     width=\"141.42mm\" height=\"100mm\" viewBox=\"0 0 141.42 100\"\n",
       "     stroke=\"none\"\n",
       "     fill=\"#000000\"\n",
       "     stroke-width=\"0.3\"\n",
       "     font-size=\"3.88\"\n",
       ">\n",
       "<defs>\n",
       "  <marker id=\"arrow\" markerWidth=\"15\" markerHeight=\"7\" refX=\"5\" refY=\"3.5\" orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "    <path d=\"M0,0 L15,3.5 L0,7 z\" stroke=\"context-stroke\" fill=\"context-stroke\"/>\n",
       "  </marker>\n",
       "</defs>\n",
       "<g stroke-width=\"1.22\" fill=\"#000000\" fill-opacity=\"0.000\" id=\"img-5b0370da-1\">\n",
       "  <g transform=\"translate(101.62,69.71)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M22.98,-10.57 L-22.98,10.57 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(106.66,40.76)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-18.7,-13.08 L18.7,13.08 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(58.22,37.58)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M20.58,-10.42 L-20.58,10.42 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(55.5,16.51)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-22.63,-6.56 L22.63,6.56 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(42.69,87.13)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M25.02,-3.67 L-25.02,3.67 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(53.18,66.53)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M16.4,12.9 L-16.4,-12.9 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(22.27,71.07)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-8.45,16.59 L8.45,-16.59 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(30.03,29.41)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.18,16.84 L-2.18,-16.84 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"1.22\" id=\"img-5b0370da-2\">\n",
       "  <g transform=\"translate(81.74,78.85)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.65,0.48 L-3.09,1.42 0.45,-1.91 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(122.74,52)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.1,-1.93 L2.62,1.84 -2.73,0.1 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(40.64,46.48)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.67,0.4 L-3,1.52 0.33,-1.92 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(74.71,22.08)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.94,-1.81 L3.42,0.99 -2.47,0.82 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(21.29,90.27)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.22,1.13 L-3.61,0.53 1.4,-1.66 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(39.24,55.58)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.26,1.92 L-2.47,-1.94 2.73,0.02 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(29.46,56.93)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.52,0.75 L1.25,-2.46 1.27,1.71 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(28.19,15.17)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.84,1.43 L-0.34,-2.6 2.18,1.17 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-5b0370da-3\">\n",
       "  <g transform=\"translate(87.61,76.15)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(118.15,48.79)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(45.49,44.03)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(69.59,20.6)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.24,89.4)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(42.96,58.51)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.51,60.77)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">7</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(28.66,18.87)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">8</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"0\" stroke=\"#000000\" stroke-opacity=\"0.000\" id=\"img-5b0370da-4\">\n",
       "  <g transform=\"translate(129.64,56.82)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.69,24.69)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.3,8.33)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.6,82.59)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,91.67)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.75,50.48)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-5b0370da-5\">\n",
       "  <g transform=\"translate(129.64,56.82)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.69,24.69)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.3,8.33)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.6,82.59)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,91.67)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.75,50.48)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "MyGraph({6, 8} directed Int64 metagraph with Float64 weights defined by :weight (default weight 1.0))"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g = MyGraph(1=>4, 4=>5, 5=>6, 6=>3, 3=>2, 2=>1, 2=>6, 4=>6)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "A key way to represent a graph in linear algebra is the [incidence matrix](https://en.wikipedia.org/wiki/Incidence_matrix).  As defined in Strang's textbook, this is a matrix where the **rows correspond to edges** and the **columns correspond to nodes**.  (Some authors use the transpose of this instead.)\n",
    "\n",
    "In particular, in the row for each edge going **from node N to node M**, there is a **-1 in column N** and a **+1 in column N**.\n",
    "\n",
    "For example, the incidence matrix of the graph above is:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8×6 Matrix{Int64}:\n",
       " -1   0   0   1   0   0\n",
       "  1  -1   0   0   0   0\n",
       "  0  -1   0   0   0   1\n",
       "  0   1  -1   0   0   0\n",
       "  0   0   0  -1   1   0\n",
       "  0   0   0  -1   0   1\n",
       "  0   0   0   0  -1   1\n",
       "  0   0   1   0   0  -1"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = incidence(g)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There is an interesting structure if you think about *loops* in the graph.  For example, in the graph above there is a loop among nodes 6, 3, 2, via edges 4,3,8.  Let's look at the rows of $A$ corresponding to those edges:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3×6 Matrix{Int64}:\n",
       " 0   1  -1  0  0   0\n",
       " 0  -1   0  0  0   1\n",
       " 0   0   1  0  0  -1"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[[4,3,8],:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If we **add these rows** we get **zero**:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1×6 adjoint(::Vector{Int64}) with eltype Int64:\n",
       " 0  0  0  0  0  0"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A[4,:]' + A[3,:]' + A[8,:]'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In general, it is easy to see that **any loop in the graph** corresponds to **dependent rows**: if we sum the rows going around the loop (with a minus sign for arrows in the wrong direction), we get zero.\n",
    "\n",
    "The reason is simple: we get a -1 in a column when we *leave* a node, and a +1 in the column when we *enter* a node.  When we go around the loop, we leave and enter each node, so the sum is zero.\n",
    "\n",
    "But dependent rows correspond to **elements of the left nullspace**:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1×6 Matrix{Int64}:\n",
       " 0  0  0  0  0  0"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[0 0 1 1 0 0 0 1] * A"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "That means that the number of \"independent\" (primitive) loops in a graph is related to the **rank** of the incidence matrix, and the **independent rows of A have no loops**.\n",
    "\n",
    "Let's look at the row-reduced echelon (rref) form of $A^T$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6×8 Matrix{Int64}:\n",
       " 1  0  0  0  0  -1  -1   0\n",
       " 0  1  0  0  0  -1  -1   0\n",
       " 0  0  1  0  0   1   1  -1\n",
       " 0  0  0  1  0   0   0  -1\n",
       " 0  0  0  0  1   0  -1   0\n",
       " 0  0  0  0  0   0   0   0"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Matrix{Int}(rref(Matrix(A')))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that the rank of $A$ is 5:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rank(A)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This means that there are **five loop-free (independent) edges**, and there are **three** (8 - 5) primitive loops.  Using the rref form of $A^T$, we can read off a basis for the left nullspace from the free columns (6,7,8):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8×3 Matrix{Int64}:\n",
       "  1   1  0\n",
       "  1   1  0\n",
       " -1  -1  1\n",
       "  0   0  1\n",
       "  0   1  0\n",
       "  1   0  0\n",
       "  0   1  0\n",
       "  0   0  1"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "N = leftnullspace(g)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6×3 Matrix{Int64}:\n",
       " 0  0  0\n",
       " 0  0  0\n",
       " 0  0  0\n",
       " 0  0  0\n",
       " 0  0  0\n",
       " 0  0  0"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A' * N"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's visualize these loops by plotting the edges in a different color (red) one by one,\n",
    "with help from the Interact package to give us an interactive widget:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "animloops (generic function with 1 method)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "colorloop(g::MyGraph, n::Vector) = edgecolors!(edgecolors(g, findall(n .> 0), \"red\"), findall(n .< 0), \"blue\")\n",
    "function animloops(g::MyGraph)\n",
    "    L = leftnullspace(g)\n",
    "    @manipulate for loop in 1:size(L,2)\n",
    "        colorloop(g, L[:,loop])\n",
    "    end\n",
    "end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.webio.node+json": {
       "children": [
        {
         "children": [
          {
           "children": [
            {
             "children": [
              {
               "children": [
                {
                 "children": [
                  "loop"
                 ],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "label"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "className": "interact ",
                  "style": {
                   "padding": "5px 10px 0px 10px"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-left"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "input"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}",
                   "orient": "horizontal",
                   "type": "range"
                  },
                  "className": "slider slider is-fullwidth",
                  "max": 3,
                  "min": 1,
                  "step": 1,
                  "style": {}
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-center"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "p"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "text: formatted_val"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-right"
               },
               "type": "node"
              }
             ],
             "instanceArgs": {
              "namespace": "html",
              "tag": "div"
             },
             "nodeType": "DOM",
             "props": {
              "className": "interact-flex-row interact-widget"
             },
             "type": "node"
            }
           ],
           "instanceArgs": {
            "handlers": {
             "changes": [
              "(function (val){return (val!=this.model[\"changes\"]()) ? (this.valueFromJulia[\"changes\"]=true, this.model[\"changes\"](val)) : undefined})"
             ],
             "index": [
              "(function (val){return (val!=this.model[\"index\"]()) ? (this.valueFromJulia[\"index\"]=true, this.model[\"index\"](val)) : undefined})"
             ]
            },
            "id": "11758169215002176570",
            "imports": {
             "data": [
              {
               "name": "knockout",
               "type": "js",
               "url": "/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js"
              },
              {
               "name": "knockout_punches",
               "type": "js",
               "url": "/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js"
              },
              {
               "name": null,
               "type": "js",
               "url": "/assetserver/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css"
              }
             ],
             "type": "async_block"
            },
            "mount_callbacks": [
             "function () {\n    var handler = (function (ko, koPunches) {\n    ko.punches.enableAll();\n    ko.bindingHandlers.numericValue = {\n        init: function(element, valueAccessor, allBindings, data, context) {\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\n            stringified.subscribe(function(value) {\n                var val = parseFloat(value);\n                if (!isNaN(val)) {\n                    valueAccessor()(val);\n                }\n            });\n            valueAccessor().subscribe(function(value) {\n                var str = JSON.stringify(value);\n                if ((str == \"0\") && ([\"-0\", \"-0.\"].indexOf(stringified()) >= 0))\n                     return;\n                 if ([\"null\", \"\"].indexOf(str) >= 0)\n                     return;\n                stringified(str);\n            });\n            ko.applyBindingsToNode(\n                element,\n                {\n                    value: stringified,\n                    valueUpdate: allBindings.get('valueUpdate'),\n                },\n                context,\n            );\n        }\n    };\n    var json_data = {\"formatted_vals\":[\"1\",\"2\",\"3\"],\"changes\":WebIO.getval({\"name\":\"changes\",\"scope\":\"11758169215002176570\",\"id\":\"12445682383640240541\",\"type\":\"observable\"}),\"index\":WebIO.getval({\"name\":\"index\",\"scope\":\"11758169215002176570\",\"id\":\"13173288597411769607\",\"type\":\"observable\"})};\n    var self = this;\n    function AppViewModel() {\n        for (var key in json_data) {\n            var el = json_data[key];\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\n        }\n        \n        [this[\"formatted_val\"]=ko.computed(    function(){\n        return this.formatted_vals()[parseInt(this.index())-(1)];\n    }\n,this)]\n        [this[\"changes\"].subscribe((function (val){!(this.valueFromJulia[\"changes\"]) ? (WebIO.setval({\"name\":\"changes\",\"scope\":\"11758169215002176570\",\"id\":\"12445682383640240541\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"changes\"]=false}),self),this[\"index\"].subscribe((function (val){!(this.valueFromJulia[\"index\"]) ? (WebIO.setval({\"name\":\"index\",\"scope\":\"11758169215002176570\",\"id\":\"13173288597411769607\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"index\"]=false}),self)]\n        \n    }\n    self.model = new AppViewModel();\n    self.valueFromJulia = {};\n    for (var key in json_data) {\n        self.valueFromJulia[key] = false;\n    }\n    ko.applyBindings(self.model, self.dom);\n}\n);\n    (WebIO.importBlock({\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"}],\"type\":\"async_block\"})).then((imports) => handler.apply(this, imports));\n}\n"
            ],
            "observables": {
             "changes": {
              "id": "12445682383640240541",
              "sync": false,
              "value": 0
             },
             "index": {
              "id": "13173288597411769607",
              "sync": true,
              "value": 2
             }
            },
            "systemjs_options": null
           },
           "nodeType": "Scope",
           "props": {},
           "type": "node"
          }
         ],
         "instanceArgs": {
          "namespace": "html",
          "tag": "div"
         },
         "nodeType": "DOM",
         "props": {
          "className": "field interact-widget"
         },
         "type": "node"
        },
        {
         "children": [
          {
           "children": [],
           "instanceArgs": {
            "id": "3988630758424797120",
            "name": "obs-node"
           },
           "nodeType": "ObservableNode",
           "props": {},
           "type": "node"
          }
         ],
         "instanceArgs": {
          "handlers": {},
          "id": "7944926038166744988",
          "imports": {
           "data": [],
           "type": "async_block"
          },
          "mount_callbacks": [],
          "observables": {
           "obs-node": {
            "id": "3988630758424797120",
            "sync": false,
            "value": {
             "children": [
              {
               "children": [],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "setInnerHtml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg xmlns=\"http://www.w3.org/2000/svg\"\n     xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n     version=\"1.2\"\n     width=\"141.42mm\" height=\"100mm\" viewBox=\"0 0 141.42 100\"\n     stroke=\"none\"\n     fill=\"#000000\"\n     stroke-width=\"0.3\"\n     font-size=\"3.88\"\n>\n<defs>\n  <marker id=\"arrow\" markerWidth=\"15\" markerHeight=\"7\" refX=\"5\" refY=\"3.5\" orient=\"auto\" markerUnits=\"strokeWidth\">\n    <path d=\"M0,0 L15,3.5 L0,7 z\" stroke=\"context-stroke\" fill=\"context-stroke\"/>\n  </marker>\n</defs>\n<g stroke-width=\"1.22\" fill=\"#000000\" fill-opacity=\"0.000\" id=\"img-51519b83-1\">\n  <g transform=\"translate(101.62,69.71)\" stroke=\"#FF0000\">\n    <path fill=\"none\" d=\"M22.98,-10.57 L-22.98,10.57 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(106.66,40.76)\" stroke=\"#FF0000\">\n    <path fill=\"none\" d=\"M-18.7,-13.08 L18.7,13.08 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(58.22,37.58)\" stroke=\"#0000FF\">\n    <path fill=\"none\" d=\"M20.58,-10.42 L-20.58,10.42 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(55.5,16.51)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-22.63,-6.56 L22.63,6.56 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(42.69,87.13)\" stroke=\"#FF0000\">\n    <path fill=\"none\" d=\"M25.02,-3.67 L-25.02,3.67 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(53.18,66.53)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M16.4,12.9 L-16.4,-12.9 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(22.27,71.07)\" stroke=\"#FF0000\">\n    <path fill=\"none\" d=\"M-8.45,16.59 L8.45,-16.59 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(30.03,29.41)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M2.18,16.84 L-2.18,-16.84 \" class=\"primitive\"/>\n  </g>\n</g>\n<g stroke-width=\"1.22\" id=\"img-51519b83-2\">\n  <g transform=\"translate(81.74,78.85)\" stroke=\"#FF0000\">\n    <path fill=\"none\" d=\"M2.65,0.48 L-3.09,1.42 0.45,-1.91 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(122.74,52)\" stroke=\"#FF0000\">\n    <path fill=\"none\" d=\"M0.1,-1.93 L2.62,1.84 -2.73,0.1 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(40.64,46.48)\" stroke=\"#0000FF\">\n    <path fill=\"none\" d=\"M2.67,0.4 L-3,1.52 0.33,-1.92 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(74.71,22.08)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-0.94,-1.81 L3.42,0.99 -2.47,0.82 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(21.29,90.27)\" stroke=\"#FF0000\">\n    <path fill=\"none\" d=\"M2.22,1.13 L-3.61,0.53 1.4,-1.66 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(39.24,55.58)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-0.26,1.92 L-2.47,-1.94 2.73,0.02 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(29.46,56.93)\" stroke=\"#FF0000\">\n    <path fill=\"none\" d=\"M-2.52,0.75 L1.25,-2.46 1.27,1.71 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(28.19,15.17)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-1.84,1.43 L-0.34,-2.6 2.18,1.17 \" class=\"primitive\"/>\n  </g>\n</g>\n<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-51519b83-3\">\n  <g transform=\"translate(87.61,76.15)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n    </g>\n  </g>\n  <g transform=\"translate(118.15,48.79)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n    </g>\n  </g>\n  <g transform=\"translate(45.49,44.03)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n    </g>\n  </g>\n  <g transform=\"translate(69.59,20.6)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n    </g>\n  </g>\n  <g transform=\"translate(27.24,89.4)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n    </g>\n  </g>\n  <g transform=\"translate(42.96,58.51)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n    </g>\n  </g>\n  <g transform=\"translate(27.51,60.77)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">7</text>\n    </g>\n  </g>\n  <g transform=\"translate(28.66,18.87)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">8</text>\n    </g>\n  </g>\n</g>\n<g stroke-width=\"0\" stroke=\"#000000\" stroke-opacity=\"0.000\" id=\"img-51519b83-4\">\n  <g transform=\"translate(129.64,56.82)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(83.69,24.69)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(27.3,8.33)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(73.6,82.59)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(11.79,91.67)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(32.75,50.48)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n  </g>\n</g>\n<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-51519b83-5\">\n  <g transform=\"translate(129.64,56.82)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n    </g>\n  </g>\n  <g transform=\"translate(83.69,24.69)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n    </g>\n  </g>\n  <g transform=\"translate(27.3,8.33)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n    </g>\n  </g>\n  <g transform=\"translate(73.6,82.59)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n    </g>\n  </g>\n  <g transform=\"translate(11.79,91.67)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n    </g>\n  </g>\n  <g transform=\"translate(32.75,50.48)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n    </g>\n  </g>\n</g>\n</svg>\n"
               },
               "type": "node"
              }
             ],
             "instanceArgs": {
              "namespace": "html",
              "tag": "div"
             },
             "nodeType": "DOM",
             "props": {
              "className": "interact-flex-row interact-widget"
             },
             "type": "node"
            }
           }
          },
          "systemjs_options": null
         },
         "nodeType": "Scope",
         "props": {},
         "type": "node"
        }
       ],
       "instanceArgs": {
        "namespace": "html",
        "tag": "div"
       },
       "nodeType": "DOM",
       "props": {},
       "type": "node"
      },
      "text/html": [
       "<div\n",
       "    class=\"webio-mountpoint\"\n",
       "    data-webio-mountpoint=\"12572606616339411389\"\n",
       ">\n",
       "    <script>\n",
       "    (function(){\n",
       "    // Some integrations (namely, IJulia/Jupyter) use an alternate render pathway than\n",
       "    // just putting the html on the page. If WebIO isn't defined, then it's pretty likely\n",
       "    // that we're in one of those situations and the integration just isn't installed\n",
       "    // correctly.\n",
       "    if (typeof window.WebIO === \"undefined\") {\n",
       "        document\n",
       "            .querySelector('[data-webio-mountpoint=\"12572606616339411389\"]')\n",
       "            .innerHTML = (\n",
       "                '<div style=\"padding: 1em; background-color: #f8d6da; border: 1px solid #f5c6cb; font-weight: bold;\">' +\n",
       "                '<p><strong>WebIO not detected.</strong></p>' +\n",
       "                '<p>Please read ' +\n",
       "                '<a href=\"https://juliagizmos.github.io/WebIO.jl/latest/troubleshooting/not-detected/\" target=\"_blank\">the troubleshooting guide</a> ' +\n",
       "                'for more information on how to resolve this issue.</p>' +\n",
       "                '<p><a href=\"https://juliagizmos.github.io/WebIO.jl/latest/troubleshooting/not-detected/\" target=\"_blank\">https://juliagizmos.github.io/WebIO.jl/latest/troubleshooting/not-detected/</a></p>' +\n",
       "                '</div>'\n",
       "            );\n",
       "        return;\n",
       "    }\n",
       "    WebIO.mount(\n",
       "        document.querySelector('[data-webio-mountpoint=\"12572606616339411389\"]'),\n",
       "        {\"props\":{},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"field interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{},\"nodeType\":\"Scope\",\"type\":\"node\",\"instanceArgs\":{\"imports\":{\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"},{\"name\":null,\"type\":\"js\",\"url\":\"\\/assetserver\\/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css\"}],\"type\":\"async_block\"},\"id\":\"11758169215002176570\",\"handlers\":{\"changes\":[\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\"],\"index\":[\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\"]},\"systemjs_options\":null,\"mount_callbacks\":[\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"1\\\",\\\"2\\\",\\\"3\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"11758169215002176570\\\",\\\"id\\\":\\\"12445682383640240541\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"11758169215002176570\\\",\\\"id\\\":\\\"13173288597411769607\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"11758169215002176570\\\",\\\"id\\\":\\\"12445682383640240541\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"11758169215002176570\\\",\\\"id\\\":\\\"13173288597411769607\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\"],\"observables\":{\"changes\":{\"sync\":false,\"id\":\"12445682383640240541\",\"value\":0},\"index\":{\"sync\":true,\"id\":\"13173288597411769607\",\"value\":2}}},\"children\":[{\"props\":{\"className\":\"interact-flex-row interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact-flex-row-left\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact \",\"style\":{\"padding\":\"5px 10px 0px 10px\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"label\"},\"children\":[\"loop\"]}]},{\"props\":{\"className\":\"interact-flex-row-center\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"max\":3,\"min\":1,\"attributes\":{\"type\":\"range\",\"data-bind\":\"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\",\"orient\":\"horizontal\"},\"step\":1,\"className\":\"slider slider is-fullwidth\",\"style\":{}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"input\"},\"children\":[]}]},{\"props\":{\"className\":\"interact-flex-row-right\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"attributes\":{\"data-bind\":\"text: formatted_val\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"p\"},\"children\":[]}]}]}]}]},{\"props\":{},\"nodeType\":\"Scope\",\"type\":\"node\",\"instanceArgs\":{\"imports\":{\"data\":[],\"type\":\"async_block\"},\"id\":\"249066544636319715\",\"handlers\":{},\"systemjs_options\":null,\"mount_callbacks\":[],\"observables\":{\"obs-node\":{\"sync\":false,\"id\":\"517203964183428287\",\"value\":{\"props\":{\"className\":\"interact-flex-row interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"setInnerHtml\":\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<svg xmlns=\\\"http:\\/\\/www.w3.org\\/2000\\/svg\\\"\\n     xmlns:xlink=\\\"http:\\/\\/www.w3.org\\/1999\\/xlink\\\"\\n     version=\\\"1.2\\\"\\n     width=\\\"141.42mm\\\" height=\\\"100mm\\\" viewBox=\\\"0 0 141.42 100\\\"\\n     stroke=\\\"none\\\"\\n     fill=\\\"#000000\\\"\\n     stroke-width=\\\"0.3\\\"\\n     font-size=\\\"3.88\\\"\\n>\\n<defs>\\n  <marker id=\\\"arrow\\\" markerWidth=\\\"15\\\" markerHeight=\\\"7\\\" refX=\\\"5\\\" refY=\\\"3.5\\\" orient=\\\"auto\\\" markerUnits=\\\"strokeWidth\\\">\\n    <path d=\\\"M0,0 L15,3.5 L0,7 z\\\" stroke=\\\"context-stroke\\\" fill=\\\"context-stroke\\\"\\/>\\n  <\\/marker>\\n<\\/defs>\\n<g stroke-width=\\\"1.22\\\" fill=\\\"#000000\\\" fill-opacity=\\\"0.000\\\" id=\\\"img-37ec776e-1\\\">\\n  <g transform=\\\"translate(101.62,69.71)\\\" stroke=\\\"#FF0000\\\">\\n    <path fill=\\\"none\\\" d=\\\"M22.98,-10.57 L-22.98,10.57 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(106.66,40.76)\\\" stroke=\\\"#FF0000\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-18.7,-13.08 L18.7,13.08 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(58.22,37.58)\\\" stroke=\\\"#0000FF\\\">\\n    <path fill=\\\"none\\\" d=\\\"M20.58,-10.42 L-20.58,10.42 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(55.5,16.51)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-22.63,-6.56 L22.63,6.56 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(42.69,87.13)\\\" stroke=\\\"#FF0000\\\">\\n    <path fill=\\\"none\\\" d=\\\"M25.02,-3.67 L-25.02,3.67 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(53.18,66.53)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M16.4,12.9 L-16.4,-12.9 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(22.27,71.07)\\\" stroke=\\\"#FF0000\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-8.45,16.59 L8.45,-16.59 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(30.03,29.41)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M2.18,16.84 L-2.18,-16.84 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n<\\/g>\\n<g stroke-width=\\\"1.22\\\" id=\\\"img-37ec776e-2\\\">\\n  <g transform=\\\"translate(81.74,78.85)\\\" stroke=\\\"#FF0000\\\">\\n    <path fill=\\\"none\\\" d=\\\"M2.65,0.48 L-3.09,1.42 0.45,-1.91 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(122.74,52)\\\" stroke=\\\"#FF0000\\\">\\n    <path fill=\\\"none\\\" d=\\\"M0.1,-1.93 L2.62,1.84 -2.73,0.1 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(40.64,46.48)\\\" stroke=\\\"#0000FF\\\">\\n    <path fill=\\\"none\\\" d=\\\"M2.67,0.4 L-3,1.52 0.33,-1.92 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(74.71,22.08)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-0.94,-1.81 L3.42,0.99 -2.47,0.82 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(21.29,90.27)\\\" stroke=\\\"#FF0000\\\">\\n    <path fill=\\\"none\\\" d=\\\"M2.22,1.13 L-3.61,0.53 1.4,-1.66 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(39.24,55.58)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-0.26,1.92 L-2.47,-1.94 2.73,0.02 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(29.46,56.93)\\\" stroke=\\\"#FF0000\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-2.52,0.75 L1.25,-2.46 1.27,1.71 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(28.19,15.17)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-1.84,1.43 L-0.34,-2.6 2.18,1.17 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n<\\/g>\\n<g font-size=\\\"4\\\" stroke=\\\"#000000\\\" stroke-opacity=\\\"0.000\\\" fill=\\\"#000000\\\" id=\\\"img-37ec776e-3\\\">\\n  <g transform=\\\"translate(87.61,76.15)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">1<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(118.15,48.79)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">2<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(45.49,44.03)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">3<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(69.59,20.6)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">4<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(27.24,89.4)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">5<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(42.96,58.51)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">6<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(27.51,60.77)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">7<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(28.66,18.87)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">8<\\/text>\\n    <\\/g>\\n  <\\/g>\\n<\\/g>\\n<g stroke-width=\\\"0\\\" stroke=\\\"#000000\\\" stroke-opacity=\\\"0.000\\\" id=\\\"img-37ec776e-4\\\">\\n  <g transform=\\\"translate(129.64,56.82)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"5.77\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(83.69,24.69)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"5.77\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(27.3,8.33)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"5.77\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(73.6,82.59)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"5.77\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(11.79,91.67)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"5.77\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(32.75,50.48)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"5.77\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n<\\/g>\\n<g font-size=\\\"4\\\" stroke=\\\"#000000\\\" stroke-opacity=\\\"0.000\\\" fill=\\\"#000000\\\" id=\\\"img-37ec776e-5\\\">\\n  <g transform=\\\"translate(129.64,56.82)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">1<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(83.69,24.69)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">2<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(27.3,8.33)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">3<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(73.6,82.59)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">4<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(11.79,91.67)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">5<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(32.75,50.48)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">6<\\/text>\\n    <\\/g>\\n  <\\/g>\\n<\\/g>\\n<\\/svg>\\n\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[]}]}}}},\"children\":[{\"props\":{},\"nodeType\":\"ObservableNode\",\"type\":\"node\",\"instanceArgs\":{\"id\":\"517203964183428287\",\"name\":\"obs-node\"},\"children\":[]}]}]},\n",
       "        window,\n",
       "    );\n",
       "    })()\n",
       "    </script>\n",
       "</div>\n"
      ],
      "text/plain": [
       "Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Scope(Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[\"loop\"], Dict{Symbol, Any}(:className => \"interact \", :style => Dict{Any, Any}(:padding => \"5px 10px 0px 10px\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-left\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol, Any}(:max => 3, :min => 1, :attributes => Dict{Any, Any}(:type => \"range\", Symbol(\"data-bind\") => \"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\", \"orient\" => \"horizontal\"), :step => 1, :className => \"slider slider is-fullwidth\", :style => Dict{Any, Any}()))], Dict{Symbol, Any}(:className => \"interact-flex-row-center\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol, Any}(:attributes => Dict(\"data-bind\" => \"text: formatted_val\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-right\"))], Dict{Symbol, Any}(:className => \"interact-flex-row interact-widget\")), Dict{String, Tuple{AbstractObservable, Union{Nothing, Bool}}}(\"changes\" => (Observable(0), nothing), \"index\" => (Observable(2), nothing)), Set{String}(), nothing, Asset[Asset(\"js\", \"knockout\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout.js\"), Asset(\"js\", \"knockout_punches\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout_punches.js\"), Asset(\"js\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/all.js\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/style.css\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/Interact/PENUy/src/../assets/bulma_confined.min.css\")], Dict{Any, Any}(\"changes\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")], \"index\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\")]), WebIO.ConnectionPool(Channel{Any}(32), Set{AbstractConnection}(), Condition(Base.InvasiveLinkedList{Task}(Task (runnable) @0x0000000283c9bb00, Task (runnable) @0x0000000283c9bb00), Base.AlwaysLockedST(1))), WebIO.JSString[WebIO.JSString(\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"1\\\",\\\"2\\\",\\\"3\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"11758169215002176570\\\",\\\"id\\\":\\\"12445682383640240541\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"11758169215002176570\\\",\\\"id\\\":\\\"13173288597411769607\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"11758169215002176570\\\",\\\"id\\\":\\\"12445682383640240541\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"11758169215002176570\\\",\\\"id\\\":\\\"13173288597411769607\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\")])], Dict{Symbol, Any}(:className => \"field interact-widget\")), Observable(Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[MyGraph({6, 8} directed Int64 metagraph with Float64 weights defined by :weight (default weight 1.0))], Dict{Symbol, Any}(:className => \"interact-flex-row interact-widget\")))], Dict{Symbol, Any}())"
      ]
     },
     "execution_count": 18,
     "metadata": {
      "application/vnd.webio.node+json": {
       "kernelId": "8a9fe2d3-11ba-493f-9228-1ded0ad827a7"
      }
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "animloops(g)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "These three loops are **not the only loops** in the graph, but the **other loops can be made from combinations of these loops**.  (Similarly, the columns of $N$ are not the *whole* left nullspace, they are just a **basis** for the n nullspace.\n",
    "\n",
    "For example, the loop between nodes 1-4-5-6-3-2  can be made by starting with 1-4-5-6-2 and \"adding\" the 6-3-2 loop.\n",
    "\n",
    "In this sense, a basis for the left nullspace of $A$ is a \"basis\" for the other loops in the graph: we say that they are \"primitive\" loops."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "     xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "     version=\"1.2\"\n",
       "     width=\"141.42mm\" height=\"100mm\" viewBox=\"0 0 141.42 100\"\n",
       "     stroke=\"none\"\n",
       "     fill=\"#000000\"\n",
       "     stroke-width=\"0.3\"\n",
       "     font-size=\"3.88\"\n",
       ">\n",
       "<defs>\n",
       "  <marker id=\"arrow\" markerWidth=\"15\" markerHeight=\"7\" refX=\"5\" refY=\"3.5\" orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "    <path d=\"M0,0 L15,3.5 L0,7 z\" stroke=\"context-stroke\" fill=\"context-stroke\"/>\n",
       "  </marker>\n",
       "</defs>\n",
       "<g stroke-width=\"1.22\" fill=\"#000000\" fill-opacity=\"0.000\" id=\"img-1661c3ca-1\">\n",
       "  <g transform=\"translate(101.62,69.71)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M22.98,-10.57 L-22.98,10.57 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(106.66,40.76)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-18.7,-13.08 L18.7,13.08 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(58.22,37.58)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M20.58,-10.42 L-20.58,10.42 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(55.5,16.51)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-22.63,-6.56 L22.63,6.56 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(42.69,87.13)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M25.02,-3.67 L-25.02,3.67 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(53.18,66.53)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M16.4,12.9 L-16.4,-12.9 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(22.27,71.07)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-8.45,16.59 L8.45,-16.59 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(30.03,29.41)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M2.18,16.84 L-2.18,-16.84 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"1.22\" id=\"img-1661c3ca-2\">\n",
       "  <g transform=\"translate(81.74,78.85)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M2.65,0.48 L-3.09,1.42 0.45,-1.91 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(122.74,52)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M0.1,-1.93 L2.62,1.84 -2.73,0.1 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(40.64,46.48)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.67,0.4 L-3,1.52 0.33,-1.92 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(74.71,22.08)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-0.94,-1.81 L3.42,0.99 -2.47,0.82 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(21.29,90.27)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M2.22,1.13 L-3.61,0.53 1.4,-1.66 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(39.24,55.58)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.26,1.92 L-2.47,-1.94 2.73,0.02 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(29.46,56.93)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-2.52,0.75 L1.25,-2.46 1.27,1.71 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(28.19,15.17)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-1.84,1.43 L-0.34,-2.6 2.18,1.17 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-1661c3ca-3\">\n",
       "  <g transform=\"translate(87.61,76.15)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(118.15,48.79)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(45.49,44.03)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(69.59,20.6)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.24,89.4)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(42.96,58.51)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.51,60.77)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">7</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(28.66,18.87)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">8</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"0\" stroke=\"#000000\" stroke-opacity=\"0.000\" id=\"img-1661c3ca-4\">\n",
       "  <g transform=\"translate(129.64,56.82)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.69,24.69)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.3,8.33)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.6,82.59)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,91.67)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.75,50.48)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-1661c3ca-5\">\n",
       "  <g transform=\"translate(129.64,56.82)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.69,24.69)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.3,8.33)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.6,82.59)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,91.67)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.75,50.48)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "MyGraph({6, 8} directed Int64 metagraph with Float64 weights defined by :weight (default weight 1.0))"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "colorloop(g, N[:,2] + N[:,3]) # add two loops to make another loop"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It is fun to do the same thing for bigger graphs, chosen at random:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.webio.node+json": {
       "children": [
        {
         "children": [
          {
           "children": [
            {
             "children": [
              {
               "children": [
                {
                 "children": [
                  "loop"
                 ],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "label"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "className": "interact ",
                  "style": {
                   "padding": "5px 10px 0px 10px"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-left"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "input"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}",
                   "orient": "horizontal",
                   "type": "range"
                  },
                  "className": "slider slider is-fullwidth",
                  "max": 20,
                  "min": 1,
                  "step": 1,
                  "style": {}
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-center"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "p"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "text: formatted_val"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-right"
               },
               "type": "node"
              }
             ],
             "instanceArgs": {
              "namespace": "html",
              "tag": "div"
             },
             "nodeType": "DOM",
             "props": {
              "className": "interact-flex-row interact-widget"
             },
             "type": "node"
            }
           ],
           "instanceArgs": {
            "handlers": {
             "changes": [
              "(function (val){return (val!=this.model[\"changes\"]()) ? (this.valueFromJulia[\"changes\"]=true, this.model[\"changes\"](val)) : undefined})"
             ],
             "index": [
              "(function (val){return (val!=this.model[\"index\"]()) ? (this.valueFromJulia[\"index\"]=true, this.model[\"index\"](val)) : undefined})"
             ]
            },
            "id": "1320740273246710239",
            "imports": {
             "data": [
              {
               "name": "knockout",
               "type": "js",
               "url": "/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js"
              },
              {
               "name": "knockout_punches",
               "type": "js",
               "url": "/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js"
              },
              {
               "name": null,
               "type": "js",
               "url": "/assetserver/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css"
              }
             ],
             "type": "async_block"
            },
            "mount_callbacks": [
             "function () {\n    var handler = (function (ko, koPunches) {\n    ko.punches.enableAll();\n    ko.bindingHandlers.numericValue = {\n        init: function(element, valueAccessor, allBindings, data, context) {\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\n            stringified.subscribe(function(value) {\n                var val = parseFloat(value);\n                if (!isNaN(val)) {\n                    valueAccessor()(val);\n                }\n            });\n            valueAccessor().subscribe(function(value) {\n                var str = JSON.stringify(value);\n                if ((str == \"0\") && ([\"-0\", \"-0.\"].indexOf(stringified()) >= 0))\n                     return;\n                 if ([\"null\", \"\"].indexOf(str) >= 0)\n                     return;\n                stringified(str);\n            });\n            ko.applyBindingsToNode(\n                element,\n                {\n                    value: stringified,\n                    valueUpdate: allBindings.get('valueUpdate'),\n                },\n                context,\n            );\n        }\n    };\n    var json_data = {\"formatted_vals\":[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\",\"20\"],\"changes\":WebIO.getval({\"name\":\"changes\",\"scope\":\"1320740273246710239\",\"id\":\"14295287463229216227\",\"type\":\"observable\"}),\"index\":WebIO.getval({\"name\":\"index\",\"scope\":\"1320740273246710239\",\"id\":\"18381593539664038702\",\"type\":\"observable\"})};\n    var self = this;\n    function AppViewModel() {\n        for (var key in json_data) {\n            var el = json_data[key];\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\n        }\n        \n        [this[\"formatted_val\"]=ko.computed(    function(){\n        return this.formatted_vals()[parseInt(this.index())-(1)];\n    }\n,this)]\n        [this[\"changes\"].subscribe((function (val){!(this.valueFromJulia[\"changes\"]) ? (WebIO.setval({\"name\":\"changes\",\"scope\":\"1320740273246710239\",\"id\":\"14295287463229216227\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"changes\"]=false}),self),this[\"index\"].subscribe((function (val){!(this.valueFromJulia[\"index\"]) ? (WebIO.setval({\"name\":\"index\",\"scope\":\"1320740273246710239\",\"id\":\"18381593539664038702\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"index\"]=false}),self)]\n        \n    }\n    self.model = new AppViewModel();\n    self.valueFromJulia = {};\n    for (var key in json_data) {\n        self.valueFromJulia[key] = false;\n    }\n    ko.applyBindings(self.model, self.dom);\n}\n);\n    (WebIO.importBlock({\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"}],\"type\":\"async_block\"})).then((imports) => handler.apply(this, imports));\n}\n"
            ],
            "observables": {
             "changes": {
              "id": "14295287463229216227",
              "sync": false,
              "value": 0
             },
             "index": {
              "id": "18381593539664038702",
              "sync": true,
              "value": 10
             }
            },
            "systemjs_options": null
           },
           "nodeType": "Scope",
           "props": {},
           "type": "node"
          }
         ],
         "instanceArgs": {
          "namespace": "html",
          "tag": "div"
         },
         "nodeType": "DOM",
         "props": {
          "className": "field interact-widget"
         },
         "type": "node"
        },
        {
         "children": [
          {
           "children": [],
           "instanceArgs": {
            "id": "9170528261463681105",
            "name": "obs-node"
           },
           "nodeType": "ObservableNode",
           "props": {},
           "type": "node"
          }
         ],
         "instanceArgs": {
          "handlers": {},
          "id": "8189222639433794150",
          "imports": {
           "data": [],
           "type": "async_block"
          },
          "mount_callbacks": [],
          "observables": {
           "obs-node": {
            "id": "9170528261463681105",
            "sync": false,
            "value": {
             "children": [
              {
               "children": [],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "setInnerHtml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg xmlns=\"http://www.w3.org/2000/svg\"\n     xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n     version=\"1.2\"\n     width=\"141.42mm\" height=\"100mm\" viewBox=\"0 0 141.42 100\"\n     stroke=\"none\"\n     fill=\"#000000\"\n     stroke-width=\"0.3\"\n     font-size=\"3.88\"\n>\n<defs>\n  <marker id=\"arrow\" markerWidth=\"15\" markerHeight=\"7\" refX=\"5\" refY=\"3.5\" orient=\"auto\" markerUnits=\"strokeWidth\">\n    <path d=\"M0,0 L15,3.5 L0,7 z\" stroke=\"context-stroke\" fill=\"context-stroke\"/>\n  </marker>\n</defs>\n<g stroke-width=\"0.95\" fill=\"#000000\" fill-opacity=\"0.000\" id=\"img-acff2156-1\">\n  <g transform=\"translate(96.29,37.19)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-13.08,10.47 L13.08,-10.47 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(53.76,29.23)\" stroke=\"#FF0000\">\n    <path fill=\"none\" d=\"M23.26,18.44 L-23.26,-18.44 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(66.63,70.58)\" stroke=\"#0000FF\">\n    <path fill=\"none\" d=\"M11.53,-17.47 L-11.53,17.47 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(92.67,68.65)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-10.53,-15.55 L10.53,15.55 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(104.88,56.08)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-20.35,-4.9 L20.35,4.9 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(86.91,42.91)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M22.3,-16.29 L-22.3,16.29 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(121.04,43.14)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-7.17,-15.76 L7.17,15.76 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(19.59,30.45)\" stroke=\"#FF0000\">\n    <path fill=\"none\" d=\"M6.68,-18.92 L-6.68,18.92 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(79.17,89.1)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-21.41,1.58 L21.41,-1.58 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(57.25,76.3)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-3.22,11.5 L3.22,-11.5 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(68.31,91.35)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-10.53,-0.22 L10.53,0.22 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(83.29,74.37)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M18.33,10.71 L-18.33,-10.71 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(94.36,89.42)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M6.39,-1.32 L-6.39,1.32 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(86.91,42.91)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-22.3,16.29 L22.3,-16.29 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(36.58,57.07)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M20.28,3.68 L-20.28,-3.68 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(72.44,76.62)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-8.92,-12.13 L8.92,12.13 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(19.59,30.45)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-6.68,18.92 L6.68,-18.92 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(32.46,71.8)\" stroke=\"#FF0000\">\n    <path fill=\"none\" d=\"M-17.85,-16.61 L17.85,16.61 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(21.63,66.51)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-7.76,-11 L7.76,11 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(81.81,70.9)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M1.42,17.48 L-1.42,-17.48 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(68.31,91.35)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M10.53,0.22 L-10.53,-0.22 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(94.36,89.42)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-6.39,1.32 L6.39,-1.32 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(57.48,86.06)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M21.56,4.65 L-21.56,-4.65 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(106.57,76.85)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-19.62,12.6 L19.62,-12.6 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(55.8,65.29)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-20.84,12.99 L20.84,-12.99 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(42.3,85.74)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-7,-3.42 L7,3.42 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(46.42,71.01)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-11.48,7.25 L11.48,-7.25 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(104.88,56.08)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M20.35,4.9 L-20.35,-4.9 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(117.43,74.61)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M9.57,-9.85 L-9.57,9.85 \" class=\"primitive\"/>\n  </g>\n</g>\n<g stroke-width=\"0.95\" id=\"img-acff2156-2\">\n  <g transform=\"translate(106.92,28.67)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-2.73,0.03 L2.44,-1.96 0.29,1.92 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(32.96,12.74)\" stroke=\"#FF0000\">\n    <path fill=\"none\" d=\"M-0.28,1.92 L-2.46,-1.95 2.73,0.03 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(56.66,85.68)\" stroke=\"#0000FF\">\n    <path fill=\"none\" d=\"M2.61,-0.58 L-1.56,2.37 -1.05,-1.79 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(101.61,81.85)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M1.02,-1.79 L1.59,2.35 -2.61,-0.56 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(121.73,60.14)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-1.1,-1.77 L3.49,0.84 -2.4,0.93 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(67.18,57.32)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M2.73,0.05 L-2.57,1.88 -0.16,-1.93 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(127.08,56.42)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M1.35,-1.68 L1.13,2.48 -2.48,-0.81 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(13.81,46.83)\" stroke=\"#FF0000\">\n    <path fill=\"none\" d=\"M2.4,-0.92 L-0.89,2.53 -1.51,-1.61 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(96.91,87.79)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-2.05,-1.28 L3.67,-0.27 -1.63,1.55 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(59.75,67.36)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-2.34,1 L0.72,-2.56 1.62,1.56 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(75.15,91.49)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-1.79,-1.46 L3.69,0.08 -1.9,1.39 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(67.81,65.33)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M0.14,1.93 L-2.85,-1.66 2.71,-0.27 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(91.51,90.01)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M2.34,1 L-3.54,0.73 1.21,-1.73 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(106.64,28.49)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-2.73,-0.05 L2.57,-1.88 0.16,1.93 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(19.87,54.03)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M1.29,1.7 L-3.58,-0.65 2.29,-1.06 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(79.65,86.43)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M0.94,-1.82 L1.7,2.32 -2.64,-0.5 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(25.38,14.06)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-2.4,0.92 L0.89,-2.53 1.51,1.61 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(48.07,86.33)\" stroke=\"#FF0000\">\n    <path fill=\"none\" d=\"M0.49,-1.9 L2.23,2.08 -2.72,-0.18 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(27.74,75.17)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M0.98,-1.8 L1.65,2.34 -2.63,-0.53 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(80.6,56.02)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-1.91,1.38 L-0.21,-2.61 2.12,1.22 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(61.47,91.2)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M1.79,1.46 L-3.69,-0.08 1.9,-1.39 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(97.2,88.83)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-2.34,-1 L3.54,-0.73 -1.21,1.73 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(39.45,82.17)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M1.18,1.74 L-3.53,-0.76 2.35,-0.98 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(123.45,66.01)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-2.72,-0.18 L2.73,-1.75 -0.01,1.93 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(73.86,54.03)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-2.72,-0.21 L2.77,-1.73 -0.05,1.93 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(46.26,87.67)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-0.37,-1.91 L3.04,1.48 -2.66,0.43 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(55.14,65.5)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-2.72,-0.19 L2.75,-1.74 -0.03,1.93 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(88.03,52.03)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M1.1,1.77 L-3.49,-0.84 2.4,-0.93 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(109.95,82.31)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M2.71,-0.27 L-2.09,2.15 -0.62,-1.88 \" class=\"primitive\"/>\n  </g>\n</g>\n<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-acff2156-3\">\n  <g transform=\"translate(104.37,30.72)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n    </g>\n  </g>\n  <g transform=\"translate(40.58,18.78)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n    </g>\n  </g>\n  <g transform=\"translate(59.88,80.8)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n    </g>\n  </g>\n  <g transform=\"translate(98.94,77.91)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n    </g>\n  </g>\n  <g transform=\"translate(117.26,59.06)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n    </g>\n  </g>\n  <g transform=\"translate(74.14,52.24)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n    </g>\n  </g>\n  <g transform=\"translate(125.34,52.59)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">7</text>\n    </g>\n  </g>\n  <g transform=\"translate(15.69,41.51)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">8</text>\n    </g>\n  </g>\n  <g transform=\"translate(92.2,88.14)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">9</text>\n    </g>\n  </g>\n  <g transform=\"translate(59.31,68.93)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">10</text>\n    </g>\n  </g>\n  <g transform=\"translate(75.91,91.51)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">11</text>\n    </g>\n  </g>\n  <g transform=\"translate(72.33,67.97)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">12</text>\n    </g>\n  </g>\n  <g transform=\"translate(88.93,90.54)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">13</text>\n    </g>\n  </g>\n  <g transform=\"translate(99.68,33.58)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">14</text>\n    </g>\n  </g>\n  <g transform=\"translate(24.18,54.81)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">15</text>\n    </g>\n  </g>\n  <g transform=\"translate(77.97,84.14)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">16</text>\n    </g>\n  </g>\n  <g transform=\"translate(23.5,19.39)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">17</text>\n    </g>\n  </g>\n  <g transform=\"translate(42.79,81.41)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">18</text>\n    </g>\n  </g>\n  <g transform=\"translate(26.55,73.48)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">19</text>\n    </g>\n  </g>\n  <g transform=\"translate(80.97,60.51)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">20</text>\n    </g>\n  </g>\n  <g transform=\"translate(60.72,91.19)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">21</text>\n    </g>\n  </g>\n  <g transform=\"translate(99.79,88.3)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">22</text>\n    </g>\n  </g>\n  <g transform=\"translate(44.47,83.26)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">23</text>\n    </g>\n  </g>\n  <g transform=\"translate(118.1,69.45)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">24</text>\n    </g>\n  </g>\n  <g transform=\"translate(67.96,57.71)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">25</text>\n    </g>\n  </g>\n  <g transform=\"translate(47.71,88.39)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">26</text>\n    </g>\n  </g>\n  <g transform=\"translate(53.89,66.29)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">27</text>\n    </g>\n  </g>\n  <g transform=\"translate(92.5,53.11)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">28</text>\n    </g>\n  </g>\n  <g transform=\"translate(111.32,80.89)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">29</text>\n    </g>\n  </g>\n</g>\n<g stroke-width=\"0\" stroke=\"#000000\" stroke-opacity=\"0.000\" id=\"img-acff2156-4\">\n  <g transform=\"translate(80.12,50.13)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(112.45,24.24)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(27.4,8.33)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(53.13,91.03)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(105.22,87.18)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(61.37,61.57)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(11.79,52.56)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(83.5,91.67)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(31.47,80.45)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(129.64,62.04)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n  </g>\n</g>\n<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-acff2156-5\">\n  <g transform=\"translate(80.12,50.13)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n    </g>\n  </g>\n  <g transform=\"translate(112.45,24.24)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n    </g>\n  </g>\n  <g transform=\"translate(27.4,8.33)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n    </g>\n  </g>\n  <g transform=\"translate(53.13,91.03)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n    </g>\n  </g>\n  <g transform=\"translate(105.22,87.18)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n    </g>\n  </g>\n  <g transform=\"translate(61.37,61.57)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n    </g>\n  </g>\n  <g transform=\"translate(11.79,52.56)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">7</text>\n    </g>\n  </g>\n  <g transform=\"translate(83.5,91.67)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">8</text>\n    </g>\n  </g>\n  <g transform=\"translate(31.47,80.45)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">9</text>\n    </g>\n  </g>\n  <g transform=\"translate(129.64,62.04)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">10</text>\n    </g>\n  </g>\n</g>\n</svg>\n"
               },
               "type": "node"
              }
             ],
             "instanceArgs": {
              "namespace": "html",
              "tag": "div"
             },
             "nodeType": "DOM",
             "props": {
              "className": "interact-flex-row interact-widget"
             },
             "type": "node"
            }
           }
          },
          "systemjs_options": null
         },
         "nodeType": "Scope",
         "props": {},
         "type": "node"
        }
       ],
       "instanceArgs": {
        "namespace": "html",
        "tag": "div"
       },
       "nodeType": "DOM",
       "props": {},
       "type": "node"
      },
      "text/html": [
       "<div\n",
       "    class=\"webio-mountpoint\"\n",
       "    data-webio-mountpoint=\"17860415445861512599\"\n",
       ">\n",
       "    <script>\n",
       "    (function(){\n",
       "    // Some integrations (namely, IJulia/Jupyter) use an alternate render pathway than\n",
       "    // just putting the html on the page. If WebIO isn't defined, then it's pretty likely\n",
       "    // that we're in one of those situations and the integration just isn't installed\n",
       "    // correctly.\n",
       "    if (typeof window.WebIO === \"undefined\") {\n",
       "        document\n",
       "            .querySelector('[data-webio-mountpoint=\"17860415445861512599\"]')\n",
       "            .innerHTML = (\n",
       "                '<div style=\"padding: 1em; background-color: #f8d6da; border: 1px solid #f5c6cb; font-weight: bold;\">' +\n",
       "                '<p><strong>WebIO not detected.</strong></p>' +\n",
       "                '<p>Please read ' +\n",
       "                '<a href=\"https://juliagizmos.github.io/WebIO.jl/latest/troubleshooting/not-detected/\" target=\"_blank\">the troubleshooting guide</a> ' +\n",
       "                'for more information on how to resolve this issue.</p>' +\n",
       "                '<p><a href=\"https://juliagizmos.github.io/WebIO.jl/latest/troubleshooting/not-detected/\" target=\"_blank\">https://juliagizmos.github.io/WebIO.jl/latest/troubleshooting/not-detected/</a></p>' +\n",
       "                '</div>'\n",
       "            );\n",
       "        return;\n",
       "    }\n",
       "    WebIO.mount(\n",
       "        document.querySelector('[data-webio-mountpoint=\"17860415445861512599\"]'),\n",
       "        {\"props\":{},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"field interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{},\"nodeType\":\"Scope\",\"type\":\"node\",\"instanceArgs\":{\"imports\":{\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"},{\"name\":null,\"type\":\"js\",\"url\":\"\\/assetserver\\/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css\"}],\"type\":\"async_block\"},\"id\":\"1320740273246710239\",\"handlers\":{\"changes\":[\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\"],\"index\":[\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\"]},\"systemjs_options\":null,\"mount_callbacks\":[\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\",\\\"10\\\",\\\"11\\\",\\\"12\\\",\\\"13\\\",\\\"14\\\",\\\"15\\\",\\\"16\\\",\\\"17\\\",\\\"18\\\",\\\"19\\\",\\\"20\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"1320740273246710239\\\",\\\"id\\\":\\\"14295287463229216227\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"1320740273246710239\\\",\\\"id\\\":\\\"18381593539664038702\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"1320740273246710239\\\",\\\"id\\\":\\\"14295287463229216227\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"1320740273246710239\\\",\\\"id\\\":\\\"18381593539664038702\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\"],\"observables\":{\"changes\":{\"sync\":false,\"id\":\"14295287463229216227\",\"value\":0},\"index\":{\"sync\":true,\"id\":\"18381593539664038702\",\"value\":10}}},\"children\":[{\"props\":{\"className\":\"interact-flex-row interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact-flex-row-left\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact \",\"style\":{\"padding\":\"5px 10px 0px 10px\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"label\"},\"children\":[\"loop\"]}]},{\"props\":{\"className\":\"interact-flex-row-center\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"max\":20,\"min\":1,\"attributes\":{\"type\":\"range\",\"data-bind\":\"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\",\"orient\":\"horizontal\"},\"step\":1,\"className\":\"slider slider is-fullwidth\",\"style\":{}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"input\"},\"children\":[]}]},{\"props\":{\"className\":\"interact-flex-row-right\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"attributes\":{\"data-bind\":\"text: formatted_val\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"p\"},\"children\":[]}]}]}]}]},{\"props\":{},\"nodeType\":\"Scope\",\"type\":\"node\",\"instanceArgs\":{\"imports\":{\"data\":[],\"type\":\"async_block\"},\"id\":\"13572385359831374871\",\"handlers\":{},\"systemjs_options\":null,\"mount_callbacks\":[],\"observables\":{\"obs-node\":{\"sync\":false,\"id\":\"3839872177707527832\",\"value\":{\"props\":{\"className\":\"interact-flex-row interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"setInnerHtml\":\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<svg xmlns=\\\"http:\\/\\/www.w3.org\\/2000\\/svg\\\"\\n     xmlns:xlink=\\\"http:\\/\\/www.w3.org\\/1999\\/xlink\\\"\\n     version=\\\"1.2\\\"\\n     width=\\\"141.42mm\\\" height=\\\"100mm\\\" viewBox=\\\"0 0 141.42 100\\\"\\n     stroke=\\\"none\\\"\\n     fill=\\\"#000000\\\"\\n     stroke-width=\\\"0.3\\\"\\n     font-size=\\\"3.88\\\"\\n>\\n<defs>\\n  <marker id=\\\"arrow\\\" markerWidth=\\\"15\\\" markerHeight=\\\"7\\\" refX=\\\"5\\\" refY=\\\"3.5\\\" orient=\\\"auto\\\" markerUnits=\\\"strokeWidth\\\">\\n    <path d=\\\"M0,0 L15,3.5 L0,7 z\\\" stroke=\\\"context-stroke\\\" fill=\\\"context-stroke\\\"\\/>\\n  <\\/marker>\\n<\\/defs>\\n<g stroke-width=\\\"0.95\\\" fill=\\\"#000000\\\" fill-opacity=\\\"0.000\\\" id=\\\"img-a32c4882-1\\\">\\n  <g transform=\\\"translate(96.29,37.19)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-13.08,10.47 L13.08,-10.47 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(53.76,29.23)\\\" stroke=\\\"#FF0000\\\">\\n    <path fill=\\\"none\\\" d=\\\"M23.26,18.44 L-23.26,-18.44 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(66.63,70.58)\\\" stroke=\\\"#0000FF\\\">\\n    <path fill=\\\"none\\\" d=\\\"M11.53,-17.47 L-11.53,17.47 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(92.67,68.65)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-10.53,-15.55 L10.53,15.55 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(104.88,56.08)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-20.35,-4.9 L20.35,4.9 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(86.91,42.91)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M22.3,-16.29 L-22.3,16.29 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(121.04,43.14)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-7.17,-15.76 L7.17,15.76 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(19.59,30.45)\\\" stroke=\\\"#FF0000\\\">\\n    <path fill=\\\"none\\\" d=\\\"M6.68,-18.92 L-6.68,18.92 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(79.17,89.1)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-21.41,1.58 L21.41,-1.58 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(57.25,76.3)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-3.22,11.5 L3.22,-11.5 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(68.31,91.35)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-10.53,-0.22 L10.53,0.22 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(83.29,74.37)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M18.33,10.71 L-18.33,-10.71 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(94.36,89.42)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M6.39,-1.32 L-6.39,1.32 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(86.91,42.91)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-22.3,16.29 L22.3,-16.29 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(36.58,57.07)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M20.28,3.68 L-20.28,-3.68 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(72.44,76.62)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-8.92,-12.13 L8.92,12.13 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(19.59,30.45)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-6.68,18.92 L6.68,-18.92 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(32.46,71.8)\\\" stroke=\\\"#FF0000\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-17.85,-16.61 L17.85,16.61 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(21.63,66.51)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-7.76,-11 L7.76,11 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(81.81,70.9)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M1.42,17.48 L-1.42,-17.48 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(68.31,91.35)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M10.53,0.22 L-10.53,-0.22 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(94.36,89.42)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-6.39,1.32 L6.39,-1.32 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(57.48,86.06)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M21.56,4.65 L-21.56,-4.65 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(106.57,76.85)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-19.62,12.6 L19.62,-12.6 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(55.8,65.29)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-20.84,12.99 L20.84,-12.99 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(42.3,85.74)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-7,-3.42 L7,3.42 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(46.42,71.01)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-11.48,7.25 L11.48,-7.25 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(104.88,56.08)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M20.35,4.9 L-20.35,-4.9 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(117.43,74.61)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M9.57,-9.85 L-9.57,9.85 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n<\\/g>\\n<g stroke-width=\\\"0.95\\\" id=\\\"img-a32c4882-2\\\">\\n  <g transform=\\\"translate(106.92,28.67)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-2.73,0.03 L2.44,-1.96 0.29,1.92 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(32.96,12.74)\\\" stroke=\\\"#FF0000\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-0.28,1.92 L-2.46,-1.95 2.73,0.03 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(56.66,85.68)\\\" stroke=\\\"#0000FF\\\">\\n    <path fill=\\\"none\\\" d=\\\"M2.61,-0.58 L-1.56,2.37 -1.05,-1.79 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(101.61,81.85)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M1.02,-1.79 L1.59,2.35 -2.61,-0.56 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(121.73,60.14)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-1.1,-1.77 L3.49,0.84 -2.4,0.93 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(67.18,57.32)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M2.73,0.05 L-2.57,1.88 -0.16,-1.93 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(127.08,56.42)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M1.35,-1.68 L1.13,2.48 -2.48,-0.81 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(13.81,46.83)\\\" stroke=\\\"#FF0000\\\">\\n    <path fill=\\\"none\\\" d=\\\"M2.4,-0.92 L-0.89,2.53 -1.51,-1.61 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(96.91,87.79)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-2.05,-1.28 L3.67,-0.27 -1.63,1.55 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(59.75,67.36)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-2.34,1 L0.72,-2.56 1.62,1.56 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(75.15,91.49)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-1.79,-1.46 L3.69,0.08 -1.9,1.39 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(67.81,65.33)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M0.14,1.93 L-2.85,-1.66 2.71,-0.27 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(91.51,90.01)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M2.34,1 L-3.54,0.73 1.21,-1.73 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(106.64,28.49)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-2.73,-0.05 L2.57,-1.88 0.16,1.93 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(19.87,54.03)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M1.29,1.7 L-3.58,-0.65 2.29,-1.06 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(79.65,86.43)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M0.94,-1.82 L1.7,2.32 -2.64,-0.5 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(25.38,14.06)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-2.4,0.92 L0.89,-2.53 1.51,1.61 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(48.07,86.33)\\\" stroke=\\\"#FF0000\\\">\\n    <path fill=\\\"none\\\" d=\\\"M0.49,-1.9 L2.23,2.08 -2.72,-0.18 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(27.74,75.17)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M0.98,-1.8 L1.65,2.34 -2.63,-0.53 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(80.6,56.02)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-1.91,1.38 L-0.21,-2.61 2.12,1.22 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(61.47,91.2)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M1.79,1.46 L-3.69,-0.08 1.9,-1.39 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(97.2,88.83)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-2.34,-1 L3.54,-0.73 -1.21,1.73 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(39.45,82.17)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M1.18,1.74 L-3.53,-0.76 2.35,-0.98 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(123.45,66.01)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-2.72,-0.18 L2.73,-1.75 -0.01,1.93 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(73.86,54.03)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-2.72,-0.21 L2.77,-1.73 -0.05,1.93 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(46.26,87.67)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-0.37,-1.91 L3.04,1.48 -2.66,0.43 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(55.14,65.5)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-2.72,-0.19 L2.75,-1.74 -0.03,1.93 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(88.03,52.03)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M1.1,1.77 L-3.49,-0.84 2.4,-0.93 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(109.95,82.31)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M2.71,-0.27 L-2.09,2.15 -0.62,-1.88 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n<\\/g>\\n<g font-size=\\\"4\\\" stroke=\\\"#000000\\\" stroke-opacity=\\\"0.000\\\" fill=\\\"#000000\\\" id=\\\"img-a32c4882-3\\\">\\n  <g transform=\\\"translate(104.37,30.72)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">1<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(40.58,18.78)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">2<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(59.88,80.8)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">3<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(98.94,77.91)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">4<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(117.26,59.06)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">5<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(74.14,52.24)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">6<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(125.34,52.59)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">7<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(15.69,41.51)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">8<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(92.2,88.14)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">9<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(59.31,68.93)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">10<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(75.91,91.51)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">11<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(72.33,67.97)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">12<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(88.93,90.54)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">13<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(99.68,33.58)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">14<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(24.18,54.81)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">15<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(77.97,84.14)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">16<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(23.5,19.39)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">17<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(42.79,81.41)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">18<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(26.55,73.48)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">19<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(80.97,60.51)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">20<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(60.72,91.19)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">21<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(99.79,88.3)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">22<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(44.47,83.26)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">23<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(118.1,69.45)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">24<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(67.96,57.71)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">25<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(47.71,88.39)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">26<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(53.89,66.29)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">27<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(92.5,53.11)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">28<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(111.32,80.89)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">29<\\/text>\\n    <\\/g>\\n  <\\/g>\\n<\\/g>\\n<g stroke-width=\\\"0\\\" stroke=\\\"#000000\\\" stroke-opacity=\\\"0.000\\\" id=\\\"img-a32c4882-4\\\">\\n  <g transform=\\\"translate(80.12,50.13)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"4.47\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(112.45,24.24)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"4.47\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(27.4,8.33)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"4.47\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(53.13,91.03)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"4.47\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(105.22,87.18)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"4.47\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(61.37,61.57)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"4.47\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(11.79,52.56)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"4.47\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(83.5,91.67)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"4.47\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(31.47,80.45)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"4.47\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(129.64,62.04)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"4.47\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n<\\/g>\\n<g font-size=\\\"4\\\" stroke=\\\"#000000\\\" stroke-opacity=\\\"0.000\\\" fill=\\\"#000000\\\" id=\\\"img-a32c4882-5\\\">\\n  <g transform=\\\"translate(80.12,50.13)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">1<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(112.45,24.24)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">2<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(27.4,8.33)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">3<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(53.13,91.03)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">4<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(105.22,87.18)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">5<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(61.37,61.57)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">6<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(11.79,52.56)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">7<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(83.5,91.67)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">8<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(31.47,80.45)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">9<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(129.64,62.04)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">10<\\/text>\\n    <\\/g>\\n  <\\/g>\\n<\\/g>\\n<\\/svg>\\n\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[]}]}}}},\"children\":[{\"props\":{},\"nodeType\":\"ObservableNode\",\"type\":\"node\",\"instanceArgs\":{\"id\":\"3839872177707527832\",\"name\":\"obs-node\"},\"children\":[]}]}]},\n",
       "        window,\n",
       "    );\n",
       "    })()\n",
       "    </script>\n",
       "</div>\n"
      ],
      "text/plain": [
       "Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Scope(Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[\"loop\"], Dict{Symbol, Any}(:className => \"interact \", :style => Dict{Any, Any}(:padding => \"5px 10px 0px 10px\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-left\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol, Any}(:max => 20, :min => 1, :attributes => Dict{Any, Any}(:type => \"range\", Symbol(\"data-bind\") => \"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\", \"orient\" => \"horizontal\"), :step => 1, :className => \"slider slider is-fullwidth\", :style => Dict{Any, Any}()))], Dict{Symbol, Any}(:className => \"interact-flex-row-center\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol, Any}(:attributes => Dict(\"data-bind\" => \"text: formatted_val\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-right\"))], Dict{Symbol, Any}(:className => \"interact-flex-row interact-widget\")), Dict{String, Tuple{AbstractObservable, Union{Nothing, Bool}}}(\"changes\" => (Observable(0), nothing), \"index\" => (Observable(10), nothing)), Set{String}(), nothing, Asset[Asset(\"js\", \"knockout\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout.js\"), Asset(\"js\", \"knockout_punches\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout_punches.js\"), Asset(\"js\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/all.js\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/style.css\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/Interact/PENUy/src/../assets/bulma_confined.min.css\")], Dict{Any, Any}(\"changes\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")], \"index\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\")]), WebIO.ConnectionPool(Channel{Any}(32), Set{AbstractConnection}(), Condition(Base.InvasiveLinkedList{Task}(Task (runnable) @0x00000002837fef80, Task (runnable) @0x00000002837fef80), Base.AlwaysLockedST(1))), WebIO.JSString[WebIO.JSString(\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"4\\\",\\\"5\\\",\\\"6\\\",\\\"7\\\",\\\"8\\\",\\\"9\\\",\\\"10\\\",\\\"11\\\",\\\"12\\\",\\\"13\\\",\\\"14\\\",\\\"15\\\",\\\"16\\\",\\\"17\\\",\\\"18\\\",\\\"19\\\",\\\"20\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"1320740273246710239\\\",\\\"id\\\":\\\"14295287463229216227\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"1320740273246710239\\\",\\\"id\\\":\\\"18381593539664038702\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"1320740273246710239\\\",\\\"id\\\":\\\"14295287463229216227\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"1320740273246710239\\\",\\\"id\\\":\\\"18381593539664038702\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\")])], Dict{Symbol, Any}(:className => \"field interact-widget\")), Observable(Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[MyGraph({10, 29} directed Int64 metagraph with Float64 weights defined by :weight (default weight 1.0))], Dict{Symbol, Any}(:className => \"interact-flex-row interact-widget\")))], Dict{Symbol, Any}())"
      ]
     },
     "execution_count": 20,
     "metadata": {
      "application/vnd.webio.node+json": {
       "kernelId": "8a9fe2d3-11ba-493f-9228-1ded0ad827a7"
      }
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gbig = randgraph(10, 3)\n",
    "animloops(gbig)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Conversely, the *independent* rows of $A$ (corresponding to the **pivot columns** of the rref form of $A^T$) form a **maximal set of edges with no loops**.  A graph with no loops is called a [tree](https://en.wikipedia.org/wiki/Tree_(graph_theory)), and this particular tree is called a [spanning tree](https://en.wikipedia.org/wiki/Spanning_tree) because it touches all of (\"spans\") the nodes (assuming the graph is connected).\n",
    "\n",
    "Let's color the spanning tree (loop-free edges) of our example graph red:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "     xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "     version=\"1.2\"\n",
       "     width=\"141.42mm\" height=\"100mm\" viewBox=\"0 0 141.42 100\"\n",
       "     stroke=\"none\"\n",
       "     fill=\"#000000\"\n",
       "     stroke-width=\"0.3\"\n",
       "     font-size=\"3.88\"\n",
       ">\n",
       "<defs>\n",
       "  <marker id=\"arrow\" markerWidth=\"15\" markerHeight=\"7\" refX=\"5\" refY=\"3.5\" orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "    <path d=\"M0,0 L15,3.5 L0,7 z\" stroke=\"context-stroke\" fill=\"context-stroke\"/>\n",
       "  </marker>\n",
       "</defs>\n",
       "<g stroke-width=\"1.22\" fill=\"#000000\" fill-opacity=\"0.000\" id=\"img-db64750b-1\">\n",
       "  <g transform=\"translate(101.62,69.71)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M22.98,-10.57 L-22.98,10.57 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(106.66,40.76)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-18.7,-13.08 L18.7,13.08 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(58.22,37.58)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M20.58,-10.42 L-20.58,10.42 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(55.5,16.51)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-22.63,-6.56 L22.63,6.56 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(42.69,87.13)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M25.02,-3.67 L-25.02,3.67 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(53.18,66.53)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M16.4,12.9 L-16.4,-12.9 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(22.27,71.07)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-8.45,16.59 L8.45,-16.59 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(30.03,29.41)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.18,16.84 L-2.18,-16.84 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"1.22\" id=\"img-db64750b-2\">\n",
       "  <g transform=\"translate(81.74,78.85)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M2.65,0.48 L-3.09,1.42 0.45,-1.91 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(122.74,52)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M0.1,-1.93 L2.62,1.84 -2.73,0.1 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(40.64,46.48)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M2.67,0.4 L-3,1.52 0.33,-1.92 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(74.71,22.08)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-0.94,-1.81 L3.42,0.99 -2.47,0.82 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(21.29,90.27)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M2.22,1.13 L-3.61,0.53 1.4,-1.66 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(39.24,55.58)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.26,1.92 L-2.47,-1.94 2.73,0.02 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(29.46,56.93)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.52,0.75 L1.25,-2.46 1.27,1.71 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(28.19,15.17)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.84,1.43 L-0.34,-2.6 2.18,1.17 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-db64750b-3\">\n",
       "  <g transform=\"translate(87.61,76.15)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(118.15,48.79)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(45.49,44.03)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(69.59,20.6)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.24,89.4)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(42.96,58.51)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.51,60.77)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">7</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(28.66,18.87)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">8</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"0\" stroke=\"#000000\" stroke-opacity=\"0.000\" id=\"img-db64750b-4\">\n",
       "  <g transform=\"translate(129.64,56.82)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.69,24.69)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.3,8.33)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.6,82.59)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,91.67)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.75,50.48)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-db64750b-5\">\n",
       "  <g transform=\"translate(129.64,56.82)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.69,24.69)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.3,8.33)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.6,82.59)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,91.67)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.75,50.48)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "MyGraph({6, 8} directed Int64 metagraph with Float64 weights defined by :weight (default weight 1.0))"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "colortree(g)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also discard all of the edges that are *not* in the spanning tree, and we are left with a more boring graph of *just* the spanning tree:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "     xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "     version=\"1.2\"\n",
       "     width=\"141.42mm\" height=\"100mm\" viewBox=\"0 0 141.42 100\"\n",
       "     stroke=\"none\"\n",
       "     fill=\"#000000\"\n",
       "     stroke-width=\"0.3\"\n",
       "     font-size=\"3.88\"\n",
       ">\n",
       "<defs>\n",
       "  <marker id=\"arrow\" markerWidth=\"15\" markerHeight=\"7\" refX=\"5\" refY=\"3.5\" orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "    <path d=\"M0,0 L15,3.5 L0,7 z\" stroke=\"context-stroke\" fill=\"context-stroke\"/>\n",
       "  </marker>\n",
       "</defs>\n",
       "<g stroke-width=\"1.22\" fill=\"#000000\" fill-opacity=\"0.000\" id=\"img-6d3cf69e-1\">\n",
       "  <g transform=\"translate(102.04,60.54)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-4.81,-7.68 L4.81,7.68 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(87.3,36.95)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-5.07,-8.13 L5.07,8.13 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(45.79,18.78)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M28.18,5.09 L-28.18,-5.09 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(104.72,16.63)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M19.48,-6.49 L-19.48,6.49 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(115.4,81.89)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-3.69,-5.89 L3.69,5.89 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"1.22\" id=\"img-6d3cf69e-2\">\n",
       "  <g transform=\"translate(105.36,65.84)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.1,-1.77 L1.49,2.39 -2.59,-0.62 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(90.88,42.7)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.1,-1.77 L1.49,2.39 -2.59,-0.62 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(21.19,14.34)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.29,1.7 L-3.58,-0.65 2.29,-1.06 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(88.58,22.01)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.53,0.73 L-3.34,1.11 0.81,-1.85 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(117.6,85.39)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.1,-1.77 L1.49,2.39 -2.59,-0.62 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-6d3cf69e-3\">\n",
       "  <g transform=\"translate(105.66,66.33)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(91.05,42.96)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(28.79,15.71)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(92.26,20.78)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(118.46,86.78)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"0\" stroke=\"#000000\" stroke-opacity=\"0.000\" id=\"img-6d3cf69e-4\">\n",
       "  <g transform=\"translate(94.8,48.97)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(79.8,24.93)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(129.64,8.33)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(109.28,72.11)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(121.52,91.67)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,12.64)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-6d3cf69e-5\">\n",
       "  <g transform=\"translate(94.8,48.97)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(79.8,24.93)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(129.64,8.33)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(109.28,72.11)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(121.52,91.67)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,12.64)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "MyGraph({6, 5} directed Int64 metagraph with Float64 weights defined by :weight (default weight 1.0))"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tree(g)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can do the same thing for our bigger random example:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "     xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "     version=\"1.2\"\n",
       "     width=\"141.42mm\" height=\"100mm\" viewBox=\"0 0 141.42 100\"\n",
       "     stroke=\"none\"\n",
       "     fill=\"#000000\"\n",
       "     stroke-width=\"0.3\"\n",
       "     font-size=\"3.88\"\n",
       ">\n",
       "<defs>\n",
       "  <marker id=\"arrow\" markerWidth=\"15\" markerHeight=\"7\" refX=\"5\" refY=\"3.5\" orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "    <path d=\"M0,0 L15,3.5 L0,7 z\" stroke=\"context-stroke\" fill=\"context-stroke\"/>\n",
       "  </marker>\n",
       "</defs>\n",
       "<g stroke-width=\"0.95\" fill=\"#000000\" fill-opacity=\"0.000\" id=\"img-0f22a83c-1\">\n",
       "  <g transform=\"translate(96.29,37.19)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-13.08,10.47 L13.08,-10.47 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(53.76,29.23)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M23.26,18.44 L-23.26,-18.44 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(66.63,70.58)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M11.53,-17.47 L-11.53,17.47 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(92.67,68.65)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-10.53,-15.55 L10.53,15.55 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(104.88,56.08)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-20.35,-4.9 L20.35,4.9 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(86.91,42.91)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M22.3,-16.29 L-22.3,16.29 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(121.04,43.14)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-7.17,-15.76 L7.17,15.76 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(19.59,30.45)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M6.68,-18.92 L-6.68,18.92 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(79.17,89.1)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-21.41,1.58 L21.41,-1.58 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(57.25,76.3)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-3.22,11.5 L3.22,-11.5 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(68.31,91.35)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-10.53,-0.22 L10.53,0.22 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.29,74.37)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M18.33,10.71 L-18.33,-10.71 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(94.36,89.42)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M6.39,-1.32 L-6.39,1.32 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(86.91,42.91)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-22.3,16.29 L22.3,-16.29 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(36.58,57.07)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M20.28,3.68 L-20.28,-3.68 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(72.44,76.62)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-8.92,-12.13 L8.92,12.13 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(19.59,30.45)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-6.68,18.92 L6.68,-18.92 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.46,71.8)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-17.85,-16.61 L17.85,16.61 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(21.63,66.51)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-7.76,-11 L7.76,11 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(81.81,70.9)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.42,17.48 L-1.42,-17.48 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(68.31,91.35)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M10.53,0.22 L-10.53,-0.22 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(94.36,89.42)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-6.39,1.32 L6.39,-1.32 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(57.48,86.06)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M21.56,4.65 L-21.56,-4.65 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(106.57,76.85)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-19.62,12.6 L19.62,-12.6 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(55.8,65.29)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-20.84,12.99 L20.84,-12.99 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(42.3,85.74)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-7,-3.42 L7,3.42 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(46.42,71.01)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-11.48,7.25 L11.48,-7.25 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(104.88,56.08)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M20.35,4.9 L-20.35,-4.9 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(117.43,74.61)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M9.57,-9.85 L-9.57,9.85 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"0.95\" id=\"img-0f22a83c-2\">\n",
       "  <g transform=\"translate(106.92,28.67)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-2.73,0.03 L2.44,-1.96 0.29,1.92 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.96,12.74)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-0.28,1.92 L-2.46,-1.95 2.73,0.03 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(56.66,85.68)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M2.61,-0.58 L-1.56,2.37 -1.05,-1.79 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(101.61,81.85)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M1.02,-1.79 L1.59,2.35 -2.61,-0.56 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(121.73,60.14)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-1.1,-1.77 L3.49,0.84 -2.4,0.93 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(67.18,57.32)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M2.73,0.05 L-2.57,1.88 -0.16,-1.93 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(127.08,56.42)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.35,-1.68 L1.13,2.48 -2.48,-0.81 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(13.81,46.83)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M2.4,-0.92 L-0.89,2.53 -1.51,-1.61 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(96.91,87.79)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.05,-1.28 L3.67,-0.27 -1.63,1.55 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(59.75,67.36)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.34,1 L0.72,-2.56 1.62,1.56 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(75.15,91.49)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M-1.79,-1.46 L3.69,0.08 -1.9,1.39 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(67.81,65.33)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.14,1.93 L-2.85,-1.66 2.71,-0.27 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(91.51,90.01)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.34,1 L-3.54,0.73 1.21,-1.73 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(106.64,28.49)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.73,-0.05 L2.57,-1.88 0.16,1.93 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(19.87,54.03)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.29,1.7 L-3.58,-0.65 2.29,-1.06 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(79.65,86.43)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.94,-1.82 L1.7,2.32 -2.64,-0.5 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(25.38,14.06)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.4,0.92 L0.89,-2.53 1.51,1.61 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(48.07,86.33)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.49,-1.9 L2.23,2.08 -2.72,-0.18 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.74,75.17)\" stroke=\"#FF0000\">\n",
       "    <path fill=\"none\" d=\"M0.98,-1.8 L1.65,2.34 -2.63,-0.53 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(80.6,56.02)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.91,1.38 L-0.21,-2.61 2.12,1.22 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(61.47,91.2)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.79,1.46 L-3.69,-0.08 1.9,-1.39 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(97.2,88.83)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.34,-1 L3.54,-0.73 -1.21,1.73 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(39.45,82.17)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.18,1.74 L-3.53,-0.76 2.35,-0.98 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(123.45,66.01)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.72,-0.18 L2.73,-1.75 -0.01,1.93 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.86,54.03)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.72,-0.21 L2.77,-1.73 -0.05,1.93 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(46.26,87.67)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.37,-1.91 L3.04,1.48 -2.66,0.43 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(55.14,65.5)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.72,-0.19 L2.75,-1.74 -0.03,1.93 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(88.03,52.03)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.1,1.77 L-3.49,-0.84 2.4,-0.93 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(109.95,82.31)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.71,-0.27 L-2.09,2.15 -0.62,-1.88 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-0f22a83c-3\">\n",
       "  <g transform=\"translate(104.37,30.72)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(40.58,18.78)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(59.88,80.8)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(98.94,77.91)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(117.26,59.06)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(74.14,52.24)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(125.34,52.59)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">7</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(15.69,41.51)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">8</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(92.2,88.14)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">9</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(59.31,68.93)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">10</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(75.91,91.51)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">11</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(72.33,67.97)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">12</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(88.93,90.54)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">13</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(99.68,33.58)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">14</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(24.18,54.81)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">15</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(77.97,84.14)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">16</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(23.5,19.39)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">17</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(42.79,81.41)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">18</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(26.55,73.48)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">19</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(80.97,60.51)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">20</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(60.72,91.19)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">21</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(99.79,88.3)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">22</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(44.47,83.26)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">23</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(118.1,69.45)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">24</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(67.96,57.71)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">25</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(47.71,88.39)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">26</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(53.89,66.29)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">27</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(92.5,53.11)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">28</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(111.32,80.89)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">29</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"0\" stroke=\"#000000\" stroke-opacity=\"0.000\" id=\"img-0f22a83c-4\">\n",
       "  <g transform=\"translate(80.12,50.13)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(112.45,24.24)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.4,8.33)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(53.13,91.03)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(105.22,87.18)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(61.37,61.57)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,52.56)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.5,91.67)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(31.47,80.45)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(129.64,62.04)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-0f22a83c-5\">\n",
       "  <g transform=\"translate(80.12,50.13)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(112.45,24.24)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.4,8.33)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(53.13,91.03)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(105.22,87.18)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(61.37,61.57)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,52.56)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">7</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.5,91.67)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">8</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(31.47,80.45)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">9</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(129.64,62.04)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">10</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "MyGraph({10, 29} directed Int64 metagraph with Float64 weights defined by :weight (default weight 1.0))"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "colortree(gbig)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "     xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "     version=\"1.2\"\n",
       "     width=\"141.42mm\" height=\"100mm\" viewBox=\"0 0 141.42 100\"\n",
       "     stroke=\"none\"\n",
       "     fill=\"#000000\"\n",
       "     stroke-width=\"0.3\"\n",
       "     font-size=\"3.88\"\n",
       ">\n",
       "<defs>\n",
       "  <marker id=\"arrow\" markerWidth=\"15\" markerHeight=\"7\" refX=\"5\" refY=\"3.5\" orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "    <path d=\"M0,0 L15,3.5 L0,7 z\" stroke=\"context-stroke\" fill=\"context-stroke\"/>\n",
       "  </marker>\n",
       "</defs>\n",
       "<g stroke-width=\"0.95\" fill=\"#000000\" fill-opacity=\"0.000\" id=\"img-a9ce6c8c-1\">\n",
       "  <g transform=\"translate(100.96,32.74)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-8.46,7.33 L8.46,-7.33 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(74.2,44.36)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M10.75,-1.22 L-10.75,1.22 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(89.22,56.29)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.25,-10.38 L-0.25,10.38 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(86.19,32.49)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.29,6.92 L-2.29,-6.92 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(99.75,46.44)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-6.08,-2.28 L6.08,2.28 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(121,15.59)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-5.64,4.74 L5.64,-4.74 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(45.46,48.82)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M8.92,-1.81 L-8.92,1.81 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(87.26,80.81)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.13,-7.58 L-1.13,7.58 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(21.92,55.09)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M5.96,-2.09 L-5.96,2.09 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"0.95\" id=\"img-a9ce6c8c-2\">\n",
       "  <g transform=\"translate(107.08,27.43)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.73,0.11 L2.33,-2.02 0.39,1.91 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(67.1,45.17)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.14,1.2 L-3.64,0.41 1.5,-1.61 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(89.03,64.05)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.05,-1.28 L-0.06,2.61 -1.98,-1.33 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(84.74,28.11)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.54,1.6 L-0.84,-2.54 2.38,0.95 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(102.57,47.5)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.69,-1.87 L3.26,1.22 -2.57,0.65 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(124.26,12.85)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.73,0.08 L2.38,-2 0.35,1.92 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(40.09,49.91)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.33,1.01 L-3.55,0.72 1.22,-1.73 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(86.52,85.8)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.2,-1.15 L-0.39,2.6 -1.81,-1.45 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(19.27,56.02)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.55,0.7 L-3.31,1.16 0.76,-1.86 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-a9ce6c8c-3\">\n",
       "  <g transform=\"translate(106.66,27.8)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(66.53,45.23)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(89.05,63.12)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(84.51,27.43)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(104.85,48.35)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(125.32,11.96)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(38.76,50.18)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">7</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(86.45,86.24)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">8</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(16.86,56.86)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">9</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"0\" stroke=\"#000000\" stroke-opacity=\"0.000\" id=\"img-a9ce6c8c-4\">\n",
       "  <g transform=\"translate(89.55,42.62)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(112.36,22.85)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(58.85,46.1)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(88.88,69.96)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(82.83,22.37)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(129.64,8.33)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.06,51.54)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(85.64,91.67)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,58.63)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(109.95,50.26)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"4.47\" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-a9ce6c8c-5\">\n",
       "  <g transform=\"translate(89.55,42.62)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(112.36,22.85)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(58.85,46.1)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(88.88,69.96)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(82.83,22.37)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(129.64,8.33)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.06,51.54)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">7</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(85.64,91.67)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">8</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,58.63)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">9</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(109.95,50.26)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">10</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "MyGraph({10, 9} directed Int64 metagraph with Float64 weights defined by :weight (default weight 1.0))"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tree(gbig)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And we can make trees from even larger graphs, for fun:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "     xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "     version=\"1.2\"\n",
       "     width=\"141.42mm\" height=\"100mm\" viewBox=\"0 0 141.42 100\"\n",
       "     stroke=\"none\"\n",
       "     fill=\"#000000\"\n",
       "     stroke-width=\"0.3\"\n",
       "     font-size=\"3.88\"\n",
       ">\n",
       "<defs>\n",
       "  <marker id=\"arrow\" markerWidth=\"15\" markerHeight=\"7\" refX=\"5\" refY=\"3.5\" orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "    <path d=\"M0,0 L15,3.5 L0,7 z\" stroke=\"context-stroke\" fill=\"context-stroke\"/>\n",
       "  </marker>\n",
       "</defs>\n",
       "<g stroke-width=\"0.42\" fill=\"#000000\" fill-opacity=\"0.000\" id=\"img-065aa9e3-1\">\n",
       "  <g transform=\"translate(112.56,73.78)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.01,-1.64 L-2.01,1.64 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(122.38,70.98)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-4.35,0.04 L4.35,-0.04 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(114.35,69.19)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.51,0.59 L-0.51,-0.59 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(120.15,74.21)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.78,-2.1 L2.78,2.1 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(104.12,69.25)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M9.79,1.48 L-9.79,-1.48 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(122.43,72.89)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-4.55,-1.3 L4.55,1.3 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(97.67,21.08)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-8.02,4.16 L8.02,-4.16 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(87.32,22.15)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.42,2.5 L-0.42,-2.5 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(82.76,24.05)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M3.39,1.34 L-3.39,-1.34 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(84.56,22.62)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.23,2.28 L-2.23,-2.28 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(84.13,26.34)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.76,-0.11 L-1.76,0.11 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(82.76,35.12)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M4.42,-7.64 L-4.42,7.64 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(92.49,25.07)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.54,0.59 L2.54,-0.59 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(90.09,23)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.21,1.79 L1.21,-1.79 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(56.16,63.51)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M9.62,-0.38 L-9.62,0.38 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(69.57,72.69)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.44,-8.19 L1.44,8.19 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(61.13,65.99)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M4.97,-2.17 L-4.97,2.17 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(66.54,65.52)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.59,-1.1 L-0.59,1.1 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(58.34,59.42)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M7.69,2.93 L-7.69,-2.93 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(66.01,60.37)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.94,1.35 L-0.94,-1.35 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(72.71,53.59)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-4.13,8.07 L4.13,-8.07 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(80.08,65.25)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-10.19,-1.84 L10.19,1.84 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(63.37,62.54)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.44,0.27 L-2.44,-0.27 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(109.64,12.19)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.47,2.5 L1.47,-2.5 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(112.11,13.14)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-3.17,1.94 L3.17,-1.94 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(106.58,12.22)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.48,2.37 L-0.48,-2.37 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(113.25,14.84)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-3.88,0.79 L3.88,-0.79 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(111.01,19.61)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.43,-2.37 L2.43,2.37 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(34.31,64.48)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M8.07,-0.4 L-8.07,0.4 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(74.25,86.24)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.99,-2.61 L1.99,2.61 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(65.96,84.15)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M3.43,-1.17 L-3.43,1.17 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(78.07,83.79)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-4.8,-1.02 L4.8,1.02 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(69.63,86.33)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.05,-2.57 L-1.05,2.57 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(75.2,84.79)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.37,-1.47 L2.37,1.47 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(67,85.86)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.91,-2.4 L-2.91,2.4 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(72.38,87)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.76,-3.21 L0.76,3.21 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(76.08,60.8)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M6.27,-1.71 L-6.27,1.71 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(89.32,59.35)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.99,-0.47 L2.99,0.47 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(89.5,57.31)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-3.24,0.77 L3.24,-0.77 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(87.59,56.06)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.88,1.42 L1.88,-1.42 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(40.36,52.77)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-6.6,-2.36 L6.6,2.36 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.57,46.96)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.78,1.79 L-2.78,-1.79 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(25.74,48.8)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-4.12,-0.62 L4.12,0.62 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(18.11,66.26)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M4.05,-0.86 L-4.05,0.86 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(17.97,64.07)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M4.15,0.61 L-4.15,-0.61 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(49.13,71.18)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M3.48,-1.49 L-3.48,1.49 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(120.48,67.15)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M3.2,-2.74 L-3.2,2.74 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(127.32,59.98)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.39,1.98 L1.39,-1.98 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(104.56,77.65)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.65,-0.65 L-2.65,0.65 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"0.42\" id=\"img-065aa9e3-2\">\n",
       "  <g transform=\"translate(112.97,73.45)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.73,-0.05 L-2.42,1.97 -0.31,-1.92 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(123.03,70.97)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.87,-1.41 L3.69,-0.03 -1.82,1.44 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(115.77,70.83)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.75,1.86 L-1.93,-2.22 2.68,0.37 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(120.4,74.41)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.21,-1.93 L2.52,1.91 -2.73,0.02 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(97.94,68.31)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.38,1.67 L-3.61,-0.55 2.23,-1.12 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(123.56,73.22)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.95,-1.81 L3.42,0.98 -2.47,0.83 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(102.71,18.46)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.68,-0.38 L2.98,-1.55 -0.29,1.92 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(87.33,22.24)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.79,1.46 L-0.43,-2.59 2.22,1.13 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(82.59,23.98)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.63,1.88 L-3.22,-1.28 2.6,-0.61 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(84.43,22.49)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.61,1.88 L-2.1,-2.15 2.71,0.26 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(86.05,26.23)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.01,1.31 L-3.68,0.22 1.67,-1.53 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(79.74,40.35)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.56,-0.67 L-1.4,2.42 -1.17,-1.75 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(91.52,25.29)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.38,-0.95 L3.51,-0.81 -1.13,1.76 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(89.7,23.57)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.62,0.56 L1.6,-2.35 1.02,1.79 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(50.23,63.75)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.96,1.35 L-3.69,0.15 1.73,-1.5 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(70.55,78.29)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.77,-1.47 L0.46,2.59 -2.23,-1.12 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(59.31,66.78)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.63,0.53 L-3.14,1.37 0.51,-1.9 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(67.26,64.17)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.54,-0.71 L-1.31,2.44 -1.23,-1.73 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(53.9,57.73)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.67,1.87 L-3.25,-1.24 2.58,-0.64 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(66.7,61.36)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.99,1.8 L-1.63,-2.34 2.62,0.54 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(75.59,47.97)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.52,0.74 L1.26,-2.45 1.27,1.71 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(86.7,66.45)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.29,-1.7 L3.58,0.65 -2.29,1.06 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(64.57,62.67)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.51,1.61 L-3.65,-0.41 2.14,-1.2 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(109.69,12.1)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.57,0.66 L1.42,-2.41 1.15,1.75 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(112.49,12.91)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.71,-0.22 L2.79,-1.71 -0.08,1.93 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(106.63,12.43)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.73,1.5 L-0.53,-2.58 2.26,1.09 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(113.59,14.77)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.33,-1.01 L3.55,-0.73 -1.21,1.73 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(111.28,19.86)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.55,-1.89 L2.17,2.11 -2.72,-0.22 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(29.92,64.7)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.98,1.33 L-3.68,0.18 1.7,-1.51 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(74.48,86.56)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.9,-1.83 L1.75,2.3 -2.65,-0.47 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(65.86,84.19)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.54,0.72 L-3.32,1.14 0.78,-1.85 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(79.34,84.06)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.18,-1.74 L3.53,0.75 -2.35,0.99 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(69.61,86.4)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.45,-0.86 L-1.03,2.51 -1.42,-1.65 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(74.8,84.54)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.05,-1.93 L2.77,1.72 -2.72,0.21 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(66.49,86.28)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.73,-0.06 L-2.4,1.98 -0.33,-1.92 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(72.53,87.64)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.68,-1.52 L0.61,2.57 -2.29,-1.05 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.26,61.57)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.45,0.86 L-3.44,0.94 0.99,-1.8 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(88.71,59.25)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.36,-1.68 L3.6,0.57 -2.24,1.11 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(89.24,57.37)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.39,-0.93 L3.5,-0.83 -1.1,1.77 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(86.94,56.55)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.73,-0.02 L2.52,-1.91 0.21,1.93 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(43.66,53.95)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.74,-1.86 L3.29,1.18 -2.56,0.68 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.53,46.93)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.01,1.93 L-2.73,-1.76 2.72,-0.18 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(26.25,48.88)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.38,-1.67 L3.61,0.55 -2.23,1.12 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(17.59,66.37)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.35,0.99 L-3.54,0.75 1.19,-1.74 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(17.44,63.99)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M1.4,1.66 L-3.61,-0.53 2.22,-1.13 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(48.81,71.32)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.62,0.54 L-3.16,1.35 0.53,-1.9 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(119.62,67.89)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.73,-0.1 L-2.35,2.01 -0.38,-1.91 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(127.07,60.34)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.63,0.54 L1.64,-2.34 0.98,1.8 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(105.39,77.45)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.4,0.92 L-3.49,0.85 1.09,-1.77 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-065aa9e3-3\">\n",
       "  <g transform=\"translate(110.87,75.15)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(125.59,70.95)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(113.55,68.27)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(122.24,75.8)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(98.21,68.35)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(125.67,73.82)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(102.52,18.56)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">7</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(86.99,20.16)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">8</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(80.16,23.02)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">9</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(82.85,20.87)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">10</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(82.21,26.46)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">11</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(80.16,39.62)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">12</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(94.75,24.55)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">13</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(91.14,21.44)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">14</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(50.31,63.74)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">15</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(70.42,77.52)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">16</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(57.76,67.46)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">17</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(65.88,66.75)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">18</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(53.58,57.61)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">19</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(65.08,59.03)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">20</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(75.13,48.86)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">21</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(86.19,66.36)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">22</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(61.12,62.29)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">23</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(110.78,10.26)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">24</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(114.48,11.69)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">25</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(106.19,10.3)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">26</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(116.19,14.24)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">27</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(112.84,21.39)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">28</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(29.23,64.73)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">29</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(75.74,88.2)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">30</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(63.31,85.06)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">31</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(81.47,84.52)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">32</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(68.82,88.32)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">33</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(77.17,86.01)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">34</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(64.87,87.62)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">35</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(72.93,89.33)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">36</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(71.97,61.92)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">37</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(91.83,59.75)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">38</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(92.11,56.69)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">39</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(89.23,54.81)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">40</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(44.58,54.28)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">41</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(25.41,45.57)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">42</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(28.82,49.27)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">43</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(15.09,66.9)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">44</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(14.88,63.62)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">45</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(46.5,72.31)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">46</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(118.21,69.09)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">47</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(128.48,58.33)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">48</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(102.25,78.22)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">49</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"0\" stroke=\"#000000\" stroke-opacity=\"0.000\" id=\"img-065aa9e3-4\">\n",
       "  <g transform=\"translate(115.95,71.03)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(87.97,26.11)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(67.87,63.05)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(107.36,16.05)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(44.46,63.98)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(71.27,82.34)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(84.29,58.56)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(31.9,49.74)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(77.23,90.15)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(94.34,60.14)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(19.58,47.87)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(24.16,64.98)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(54.39,68.93)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(125.01,63.28)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(86.66,18.18)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(60.66,85.97)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(65.21,67.99)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(94.71,56.07)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(109.18,76.53)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(111.91,8.33)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(48.81,55.8)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(64.15,57.7)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(128.8,70.92)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(23.25,44.18)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(77.56,21.99)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(84.86,85.24)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(112.75,67.35)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(81.14,19.13)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(68,90.32)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(99.93,78.78)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(116.85,10.24)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(124.34,77.39)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(80.29,26.57)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(79.14,87.23)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(105.8,8.39)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(77.56,44.13)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(62.73,89.38)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(12.06,67.54)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(97.01,24.03)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.49,91.67)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(119.13,13.64)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(129.64,56.68)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(92.29,67.46)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,63.16)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(43.87,73.43)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(92.2,19.88)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(114.67,23.17)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(90.88,53.56)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(58.87,62.03)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(128.91,74.75)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"2\" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-065aa9e3-5\">\n",
       "  <g transform=\"translate(115.95,71.03)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(87.97,26.11)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(67.87,63.05)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(107.36,16.05)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(44.46,63.98)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(71.27,82.34)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(84.29,58.56)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">7</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(31.9,49.74)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">8</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(77.23,90.15)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">9</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(94.34,60.14)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">10</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(19.58,47.87)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">11</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(24.16,64.98)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">12</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(54.39,68.93)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">13</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(125.01,63.28)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">14</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(86.66,18.18)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">15</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(60.66,85.97)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">16</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(65.21,67.99)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">17</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(94.71,56.07)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">18</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(109.18,76.53)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">19</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(111.91,8.33)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">20</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(48.81,55.8)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">21</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(64.15,57.7)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">22</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(128.8,70.92)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">23</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(23.25,44.18)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">24</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(77.56,21.99)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">25</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(84.86,85.24)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">26</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(112.75,67.35)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">27</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(81.14,19.13)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">28</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(68,90.32)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">29</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(99.93,78.78)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">30</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(116.85,10.24)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">31</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(124.34,77.39)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">32</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(80.29,26.57)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">33</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(79.14,87.23)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">34</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(105.8,8.39)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">35</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(77.56,44.13)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">36</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(62.73,89.38)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">37</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(12.06,67.54)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">38</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(97.01,24.03)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">39</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.49,91.67)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">40</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(119.13,13.64)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">41</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(129.64,56.68)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">42</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(92.29,67.46)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">43</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,63.16)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">44</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(43.87,73.43)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">45</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(92.2,19.88)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">46</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(114.67,23.17)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">47</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(90.88,53.56)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">48</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(58.87,62.03)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">49</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(128.91,74.75)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">50</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "MyGraph({50, 49} directed Int64 metagraph with Float64 weights defined by :weight (default weight 1.0))"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tree(randgraph(50, 8))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Graphs and Kirchhoff's circuit laws\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "An elegant application of the incidence matrix and its subspaces arises if we think of the graph as representing an **electrical circuit**:\n",
    "\n",
    "* Each edge represents a wire/resistor, with an unknown current $i$.  The *direction* of the edge indicates the *sign convention* ($i>0$ indicates current flowing in the direction of the arrow).\n",
    "* Each node represents a junction, with an unknown voltage $v$.\n",
    "\n",
    "Let's visualize this by re-labeling our graph from above.  We'll use the [SymPy](https://github.com/JuliaPy/SymPy.jl) package to allow us to do *symbolic* (not numeric) calculations with the incidence matrix."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "     xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "     version=\"1.2\"\n",
       "     width=\"141.42mm\" height=\"100mm\" viewBox=\"0 0 141.42 100\"\n",
       "     stroke=\"none\"\n",
       "     fill=\"#000000\"\n",
       "     stroke-width=\"0.3\"\n",
       "     font-size=\"3.88\"\n",
       ">\n",
       "<defs>\n",
       "  <marker id=\"arrow\" markerWidth=\"15\" markerHeight=\"7\" refX=\"5\" refY=\"3.5\" orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "    <path d=\"M0,0 L15,3.5 L0,7 z\" stroke=\"context-stroke\" fill=\"context-stroke\"/>\n",
       "  </marker>\n",
       "</defs>\n",
       "<g stroke-width=\"1.22\" fill=\"#000000\" fill-opacity=\"0.000\" id=\"img-800eb854-1\">\n",
       "  <g transform=\"translate(101.62,69.71)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M22.98,-10.57 L-22.98,10.57 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(106.66,40.76)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-18.7,-13.08 L18.7,13.08 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(58.22,37.58)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M20.58,-10.42 L-20.58,10.42 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(55.5,16.51)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-22.63,-6.56 L22.63,6.56 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(42.69,87.13)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M25.02,-3.67 L-25.02,3.67 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(53.18,66.53)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M16.4,12.9 L-16.4,-12.9 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(22.27,71.07)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-8.45,16.59 L8.45,-16.59 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(30.03,29.41)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.18,16.84 L-2.18,-16.84 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"1.22\" id=\"img-800eb854-2\">\n",
       "  <g transform=\"translate(81.74,78.85)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.65,0.48 L-3.09,1.42 0.45,-1.91 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(122.74,52)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.1,-1.93 L2.62,1.84 -2.73,0.1 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(40.64,46.48)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.67,0.4 L-3,1.52 0.33,-1.92 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(74.71,22.08)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.94,-1.81 L3.42,0.99 -2.47,0.82 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(21.29,90.27)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.22,1.13 L-3.61,0.53 1.4,-1.66 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(39.24,55.58)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.26,1.92 L-2.47,-1.94 2.73,0.02 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(29.46,56.93)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.52,0.75 L1.25,-2.46 1.27,1.71 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(28.19,15.17)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.84,1.43 L-0.34,-2.6 2.18,1.17 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-800eb854-3\">\n",
       "  <g transform=\"translate(87.61,76.15)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₁</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(118.15,48.79)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₂</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(45.49,44.03)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₃</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(69.59,20.6)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₄</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.24,89.4)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₅</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(42.96,58.51)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₆</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.51,60.77)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₇</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(28.66,18.87)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₈</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"0\" stroke=\"#000000\" stroke-opacity=\"0.000\" id=\"img-800eb854-4\">\n",
       "  <g transform=\"translate(129.64,56.82)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.69,24.69)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.3,8.33)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.6,82.59)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,91.67)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.75,50.48)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-800eb854-5\">\n",
       "  <g transform=\"translate(129.64,56.82)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₁</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.69,24.69)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₂</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.3,8.33)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₃</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.6,82.59)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₄</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,91.67)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₅</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.75,50.48)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₆</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "MyGraph({6, 8} directed Int64 metagraph with Float64 weights defined by :weight (default weight 1.0))"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labels(g, edges=[Sym(\"i_$i\") for i = 1:size(A,1)], nodes=[Sym(\"v_$i\") for i = 1:size(A,2)])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Kirchhoff's voltage law (KVL)\n",
    "\n",
    "Let's start doing some linear algebra.  What happens if we *multiply* our incidence matrix $A$ by a vector of voltages, one per node?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\left[ \\begin{array}{r}v_{1}\\\\v_{2}\\\\v_{3}\\\\v_{4}\\\\v_{5}\\\\v_{6}\\end{array} \\right]$\n"
      ],
      "text/plain": [
       "6-element Vector{Sym}:\n",
       " v₁\n",
       " v₂\n",
       " v₃\n",
       " v₄\n",
       " v₅\n",
       " v₆"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v = [Sym(\"v_$i\") for i = 1:size(A,2)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8×6 Matrix{Int64}:\n",
       " -1   0   0   1   0   0\n",
       "  1  -1   0   0   0   0\n",
       "  0  -1   0   0   0   1\n",
       "  0   1  -1   0   0   0\n",
       "  0   0   0  -1   1   0\n",
       "  0   0   0  -1   0   1\n",
       "  0   0   0   0  -1   1\n",
       "  0   0   1   0   0  -1"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\left[ \\begin{array}{r}- v_{1} + v_{4}\\\\v_{1} - v_{2}\\\\- v_{2} + v_{6}\\\\v_{2} - v_{3}\\\\- v_{4} + v_{5}\\\\- v_{4} + v_{6}\\\\- v_{5} + v_{6}\\\\v_{3} - v_{6}\\end{array} \\right]$\n"
      ],
      "text/plain": [
       "8-element Vector{Sym}:\n",
       " -v₁ + v₄\n",
       "  v₁ - v₂\n",
       " -v₂ + v₆\n",
       "  v₂ - v₃\n",
       " -v₄ + v₅\n",
       " -v₄ + v₆\n",
       " -v₅ + v₆\n",
       "  v₃ - v₆"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A * v"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What we get are the **voltage difference** (and in particular, the **voltage rise**) across each edge.  It is easier to see this if we use the elements of $Av$ to directly label the edges of our graph:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "     xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "     version=\"1.2\"\n",
       "     width=\"141.42mm\" height=\"100mm\" viewBox=\"0 0 141.42 100\"\n",
       "     stroke=\"none\"\n",
       "     fill=\"#000000\"\n",
       "     stroke-width=\"0.3\"\n",
       "     font-size=\"3.88\"\n",
       ">\n",
       "<defs>\n",
       "  <marker id=\"arrow\" markerWidth=\"15\" markerHeight=\"7\" refX=\"5\" refY=\"3.5\" orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "    <path d=\"M0,0 L15,3.5 L0,7 z\" stroke=\"context-stroke\" fill=\"context-stroke\"/>\n",
       "  </marker>\n",
       "</defs>\n",
       "<g stroke-width=\"1.22\" fill=\"#000000\" fill-opacity=\"0.000\" id=\"img-4372ffc8-1\">\n",
       "  <g transform=\"translate(101.62,69.71)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M22.98,-10.57 L-22.98,10.57 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(106.66,40.76)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-18.7,-13.08 L18.7,13.08 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(58.22,37.58)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M20.58,-10.42 L-20.58,10.42 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(55.5,16.51)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-22.63,-6.56 L22.63,6.56 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(42.69,87.13)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M25.02,-3.67 L-25.02,3.67 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(53.18,66.53)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M16.4,12.9 L-16.4,-12.9 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(22.27,71.07)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-8.45,16.59 L8.45,-16.59 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(30.03,29.41)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.18,16.84 L-2.18,-16.84 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"1.22\" id=\"img-4372ffc8-2\">\n",
       "  <g transform=\"translate(81.74,78.85)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.65,0.48 L-3.09,1.42 0.45,-1.91 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(122.74,52)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.1,-1.93 L2.62,1.84 -2.73,0.1 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(40.64,46.48)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.67,0.4 L-3,1.52 0.33,-1.92 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(74.71,22.08)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.94,-1.81 L3.42,0.99 -2.47,0.82 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(21.29,90.27)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.22,1.13 L-3.61,0.53 1.4,-1.66 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(39.24,55.58)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.26,1.92 L-2.47,-1.94 2.73,0.02 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(29.46,56.93)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.52,0.75 L1.25,-2.46 1.27,1.71 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(28.19,15.17)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.84,1.43 L-0.34,-2.6 2.18,1.17 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-4372ffc8-3\">\n",
       "  <g transform=\"translate(87.61,76.15)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">-v₁ + v₄</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(118.15,48.79)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₁ - v₂</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(45.49,44.03)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">-v₂ + v₆</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(69.59,20.6)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₂ - v₃</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.24,89.4)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">-v₄ + v₅</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(42.96,58.51)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">-v₄ + v₆</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.51,60.77)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">-v₅ + v₆</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(28.66,18.87)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₃ - v₆</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"0\" stroke=\"#000000\" stroke-opacity=\"0.000\" id=\"img-4372ffc8-4\">\n",
       "  <g transform=\"translate(129.64,56.82)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.69,24.69)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.3,8.33)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.6,82.59)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,91.67)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.75,50.48)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-4372ffc8-5\">\n",
       "  <g transform=\"translate(129.64,56.82)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₁</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.69,24.69)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₂</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.3,8.33)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₃</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.6,82.59)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₄</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,91.67)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₅</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.75,50.48)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₆</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "MyGraph({6, 8} directed Int64 metagraph with Float64 weights defined by :weight (default weight 1.0))"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labels(g, edges=A*v, nodes=v)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, let's ask the inverse question: **what voltage differences $d=Av$** can possibly arise?  i.e. what $d$ are in $C(A)$? \n",
    "\n",
    "Remember, $A$ is **not full rank**: its rank is 5, but there are 8 rows (8 edges).  So, $C(A)$ is 5-dimensional (\"missing\" three dimensions).  Equivalently $C(A)$ is **orthogonal to the left nullspace**, which has three rows.  What does this mean?\n",
    "\n",
    "Let's visualize the differences d:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "     xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "     version=\"1.2\"\n",
       "     width=\"141.42mm\" height=\"100mm\" viewBox=\"0 0 141.42 100\"\n",
       "     stroke=\"none\"\n",
       "     fill=\"#000000\"\n",
       "     stroke-width=\"0.3\"\n",
       "     font-size=\"3.88\"\n",
       ">\n",
       "<defs>\n",
       "  <marker id=\"arrow\" markerWidth=\"15\" markerHeight=\"7\" refX=\"5\" refY=\"3.5\" orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "    <path d=\"M0,0 L15,3.5 L0,7 z\" stroke=\"context-stroke\" fill=\"context-stroke\"/>\n",
       "  </marker>\n",
       "</defs>\n",
       "<g stroke-width=\"1.22\" fill=\"#000000\" fill-opacity=\"0.000\" id=\"img-59206a97-1\">\n",
       "  <g transform=\"translate(101.62,69.71)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M22.98,-10.57 L-22.98,10.57 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(106.66,40.76)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-18.7,-13.08 L18.7,13.08 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(58.22,37.58)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M20.58,-10.42 L-20.58,10.42 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(55.5,16.51)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-22.63,-6.56 L22.63,6.56 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(42.69,87.13)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M25.02,-3.67 L-25.02,3.67 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(53.18,66.53)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M16.4,12.9 L-16.4,-12.9 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(22.27,71.07)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-8.45,16.59 L8.45,-16.59 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(30.03,29.41)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.18,16.84 L-2.18,-16.84 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"1.22\" id=\"img-59206a97-2\">\n",
       "  <g transform=\"translate(81.74,78.85)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.65,0.48 L-3.09,1.42 0.45,-1.91 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(122.74,52)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.1,-1.93 L2.62,1.84 -2.73,0.1 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(40.64,46.48)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.67,0.4 L-3,1.52 0.33,-1.92 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(74.71,22.08)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.94,-1.81 L3.42,0.99 -2.47,0.82 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(21.29,90.27)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.22,1.13 L-3.61,0.53 1.4,-1.66 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(39.24,55.58)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.26,1.92 L-2.47,-1.94 2.73,0.02 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(29.46,56.93)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.52,0.75 L1.25,-2.46 1.27,1.71 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(28.19,15.17)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.84,1.43 L-0.34,-2.6 2.18,1.17 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-59206a97-3\">\n",
       "  <g transform=\"translate(87.61,76.15)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">d₁</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(118.15,48.79)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">d₂</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(45.49,44.03)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">d₃</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(69.59,20.6)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">d₄</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.24,89.4)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">d₅</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(42.96,58.51)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">d₆</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.51,60.77)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">d₇</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(28.66,18.87)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">d₈</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"0\" stroke=\"#000000\" stroke-opacity=\"0.000\" id=\"img-59206a97-4\">\n",
       "  <g transform=\"translate(129.64,56.82)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.69,24.69)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.3,8.33)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.6,82.59)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,91.67)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.75,50.48)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-59206a97-5\">\n",
       "  <g transform=\"translate(129.64,56.82)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₁</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.69,24.69)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₂</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.3,8.33)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₃</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.6,82.59)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₄</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,91.67)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₅</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.75,50.48)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">v₆</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "MyGraph({6, 8} directed Int64 metagraph with Float64 weights defined by :weight (default weight 1.0))"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = [Sym(\"d_$j\") for j = 1:size(A,1)]\n",
    "labels(g, edges=d, nodes=v)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If $N$ is a basis for the left nullspace, we must have $N^T d = 0$, or:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\left[ \\begin{array}{r}d_{1} + d_{2} - d_{3} + d_{6}\\\\d_{1} + d_{2} - d_{3} + d_{5} + d_{7}\\\\d_{3} + d_{4} + d_{8}\\end{array} \\right]$\n"
      ],
      "text/plain": [
       "3-element Vector{Sym}:\n",
       "       d₁ + d₂ - d₃ + d₆\n",
       " d₁ + d₂ - d₃ + d₅ + d₇\n",
       "             d₃ + d₄ + d₈"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "N' * d"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "But what is this?  Remember, each element of the left nullspace corresponded to a **loop in the graph**.  Saying $N^T d = 0$, or $d \\perp N(A^T)$, is equivalent to saying that the **sum of the voltage rises around each loop = 0**.\n",
    "\n",
    "But this is precisely [Kirchhoff's voltage law](https://en.wikipedia.org/wiki/Kirchhoff's_circuit_laws) from circuit theory!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Kirchhoff's current law (KCL)\n",
    "\n",
    "To actually solve circuit problems, we need three additional ingredients:\n",
    "\n",
    "* The voltage difference $d$ must be divided by a resistance $R$ to get the *current* $i$ through that edge: $i = -d/R = -Yd$ (where $Y=1/R$ is the \"admittance\"), by [Ohm's law](https://en.wikipedia.org/wiki/Ohm's_law).  Note that we need a minus sign to get the current in the direction of the arrow, since $d$ was the the voltage *rise* across the edge.\n",
    "\n",
    "* The sum of the currents $i$ entering each node must be zero, by Kirchhoff's current law (KCL).\n",
    "\n",
    "* To get a nontrivial solution, we need some kind of *source*: a battery or current source, to start currents flowing.\n",
    "\n",
    "How do we represent each one of these steps by linear-algebra operations?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Ohm's law\n",
    "\n",
    "To represent Ohm's law, we need to multiply the voltage differences $d=Av$ by a *diagonal matrix* of admittances:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\left[ \\begin{array}{rrrrrrrr}Y_{1}&0&0&0&0&0&0&0\\\\0&Y_{2}&0&0&0&0&0&0\\\\0&0&Y_{3}&0&0&0&0&0\\\\0&0&0&Y_{4}&0&0&0&0\\\\0&0&0&0&Y_{5}&0&0&0\\\\0&0&0&0&0&Y_{6}&0&0\\\\0&0&0&0&0&0&Y_{7}&0\\\\0&0&0&0&0&0&0&Y_{8}\\end{array}\\right]$\n"
      ],
      "text/plain": [
       "8×8 Matrix{Sym}:\n",
       " Y₁    0    0    0    0    0    0    0\n",
       "   0  Y₂    0    0    0    0    0    0\n",
       "   0    0  Y₃    0    0    0    0    0\n",
       "   0    0    0  Y₄    0    0    0    0\n",
       "   0    0    0    0  Y₅    0    0    0\n",
       "   0    0    0    0    0  Y₆    0    0\n",
       "   0    0    0    0    0    0  Y₇    0\n",
       "   0    0    0    0    0    0    0  Y₈"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Y = diagm(0=>[Sym(\"Y_$i\") for i = 1:size(A,1)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\left[ \\begin{array}{r}Y_{1} d_{1}\\\\Y_{2} d_{2}\\\\Y_{3} d_{3}\\\\Y_{4} d_{4}\\\\Y_{5} d_{5}\\\\Y_{6} d_{6}\\\\Y_{7} d_{7}\\\\Y_{8} d_{8}\\end{array} \\right]$\n"
      ],
      "text/plain": [
       "8-element Vector{Sym}:\n",
       " Y₁⋅d₁\n",
       " Y₂⋅d₂\n",
       " Y₃⋅d₃\n",
       " Y₄⋅d₄\n",
       " Y₅⋅d₅\n",
       " Y₆⋅d₆\n",
       " Y₇⋅d₇\n",
       " Y₈⋅d₈"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Y*d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\left[ \\begin{array}{r}Y_{1} \\left(- v_{1} + v_{4}\\right)\\\\Y_{2} \\left(v_{1} - v_{2}\\right)\\\\Y_{3} \\left(- v_{2} + v_{6}\\right)\\\\Y_{4} \\left(v_{2} - v_{3}\\right)\\\\Y_{5} \\left(- v_{4} + v_{5}\\right)\\\\Y_{6} \\left(- v_{4} + v_{6}\\right)\\\\Y_{7} \\left(- v_{5} + v_{6}\\right)\\\\Y_{8} \\left(v_{3} - v_{6}\\right)\\end{array} \\right]$\n"
      ],
      "text/plain": [
       "8-element Vector{Sym}:\n",
       " Y₁⋅(-v₁ + v₄)\n",
       "  Y₂⋅(v₁ - v₂)\n",
       " Y₃⋅(-v₂ + v₆)\n",
       "  Y₄⋅(v₂ - v₃)\n",
       " Y₅⋅(-v₄ + v₅)\n",
       " Y₆⋅(-v₄ + v₆)\n",
       " Y₇⋅(-v₅ + v₆)\n",
       "  Y₈⋅(v₃ - v₆)"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Y*A*v"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Net current into each node\n",
    "\n",
    "Given the currents $i$, a little thought shows that the net current flowing into each node is precisely $A^T i$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\left[ \\begin{array}{r}- i_{1} + i_{2}\\\\- i_{2} - i_{3} + i_{4}\\\\- i_{4} + i_{8}\\\\i_{1} - i_{5} - i_{6}\\\\i_{5} - i_{7}\\\\i_{3} + i_{6} + i_{7} - i_{8}\\end{array} \\right]$\n"
      ],
      "text/plain": [
       "6-element Vector{Sym}:\n",
       "            -i₁ + i₂\n",
       "      -i₂ - i₃ + i₄\n",
       "            -i₄ + i₈\n",
       "       i₁ - i₅ - i₆\n",
       "             i₅ - i₇\n",
       " i₃ + i₆ + i₇ - i₈"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "i = [Sym(\"i_$j\") for j=1:size(A,1)]\n",
    "A'*i"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
       "<svg xmlns=\"http://www.w3.org/2000/svg\"\n",
       "     xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n",
       "     version=\"1.2\"\n",
       "     width=\"141.42mm\" height=\"100mm\" viewBox=\"0 0 141.42 100\"\n",
       "     stroke=\"none\"\n",
       "     fill=\"#000000\"\n",
       "     stroke-width=\"0.3\"\n",
       "     font-size=\"3.88\"\n",
       ">\n",
       "<defs>\n",
       "  <marker id=\"arrow\" markerWidth=\"15\" markerHeight=\"7\" refX=\"5\" refY=\"3.5\" orient=\"auto\" markerUnits=\"strokeWidth\">\n",
       "    <path d=\"M0,0 L15,3.5 L0,7 z\" stroke=\"context-stroke\" fill=\"context-stroke\"/>\n",
       "  </marker>\n",
       "</defs>\n",
       "<g stroke-width=\"1.22\" fill=\"#000000\" fill-opacity=\"0.000\" id=\"img-d180a1e2-1\">\n",
       "  <g transform=\"translate(101.62,69.71)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M22.98,-10.57 L-22.98,10.57 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(106.66,40.76)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-18.7,-13.08 L18.7,13.08 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(58.22,37.58)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M20.58,-10.42 L-20.58,10.42 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(55.5,16.51)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-22.63,-6.56 L22.63,6.56 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(42.69,87.13)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M25.02,-3.67 L-25.02,3.67 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(53.18,66.53)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M16.4,12.9 L-16.4,-12.9 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(22.27,71.07)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-8.45,16.59 L8.45,-16.59 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(30.03,29.41)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.18,16.84 L-2.18,-16.84 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"1.22\" id=\"img-d180a1e2-2\">\n",
       "  <g transform=\"translate(81.74,78.85)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.65,0.48 L-3.09,1.42 0.45,-1.91 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(122.74,52)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M0.1,-1.93 L2.62,1.84 -2.73,0.1 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(40.64,46.48)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.67,0.4 L-3,1.52 0.33,-1.92 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(74.71,22.08)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.94,-1.81 L3.42,0.99 -2.47,0.82 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(21.29,90.27)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M2.22,1.13 L-3.61,0.53 1.4,-1.66 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(39.24,55.58)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-0.26,1.92 L-2.47,-1.94 2.73,0.02 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(29.46,56.93)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-2.52,0.75 L1.25,-2.46 1.27,1.71 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(28.19,15.17)\" stroke=\"#D3D3D3\">\n",
       "    <path fill=\"none\" d=\"M-1.84,1.43 L-0.34,-2.6 2.18,1.17 \" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-d180a1e2-3\">\n",
       "  <g transform=\"translate(87.61,76.15)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₁</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(118.15,48.79)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₂</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(45.49,44.03)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₃</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(69.59,20.6)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₄</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.24,89.4)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₅</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(42.96,58.51)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₆</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.51,60.77)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₇</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(28.66,18.87)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₈</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "<g stroke-width=\"0\" stroke=\"#000000\" stroke-opacity=\"0.000\" id=\"img-d180a1e2-4\">\n",
       "  <g transform=\"translate(129.64,56.82)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.69,24.69)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.3,8.33)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.6,82.59)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,91.67)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.75,50.48)\" fill=\"#808080\">\n",
       "    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n",
       "  </g>\n",
       "</g>\n",
       "<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-d180a1e2-5\">\n",
       "  <g transform=\"translate(129.64,56.82)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">-i₁ + i₂</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(83.69,24.69)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">-i₂ - i₃ + i₄</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(27.3,8.33)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">-i₄ + i₈</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(73.6,82.59)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₁ - i₅ - i₆</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(11.79,91.67)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₅ - i₇</text>\n",
       "    </g>\n",
       "  </g>\n",
       "  <g transform=\"translate(32.75,50.48)\">\n",
       "    <g class=\"primitive\">\n",
       "      <text text-anchor=\"middle\" dy=\"0.35em\">i₃ + i₆ + i₇ - i₈</text>\n",
       "    </g>\n",
       "  </g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "MyGraph({6, 8} directed Int64 metagraph with Float64 weights defined by :weight (default weight 1.0))"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labels(g, edges=i, nodes=A'*i)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Why is this?  The reason is that each row $A^T$ corresponds to a node, and has $\\pm 1$ for each edge going into or out of the node, exactly the right sign to sum the net currents flowing in:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6×8 adjoint(::Matrix{Int64}) with eltype Int64:\n",
       " -1   1   0   0   0   0   0   0\n",
       "  0  -1  -1   1   0   0   0   0\n",
       "  0   0   0  -1   0   0   0   1\n",
       "  1   0   0   0  -1  -1   0   0\n",
       "  0   0   0   0   1   0  -1   0\n",
       "  0   0   1   0   0   1   1  -1"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Putting it together, given voltages $v$, the net current flowing **out of** each node is\n",
    "\n",
    "$$\n",
    "A^T Y A v\n",
    "$$\n",
    "\n",
    "The matrix $A^T Y A$ is a very special and important kind of matrix.  It is obviously **symmetric**, and later on in the course we will see that any matrix of this form is necessarily **positive semidefinite** (all pivots are ≥ 0).   Many important matrices in science, engineering, statistics, and other fields take on this special form.\n",
    "\n",
    "If we multiply $A^T Y A$ together, not all of its specialness is apparent.  It is often better to leave it in \"factored\" form:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\left[ \\begin{array}{rrrrrr}Y_{1} + Y_{2}&- Y_{2}&0&- Y_{1}&0&0\\\\- Y_{2}&Y_{2} + Y_{3} + Y_{4}&- Y_{4}&0&0&- Y_{3}\\\\0&- Y_{4}&Y_{4} + Y_{8}&0&0&- Y_{8}\\\\- Y_{1}&0&0&Y_{1} + Y_{5} + Y_{6}&- Y_{5}&- Y_{6}\\\\0&0&0&- Y_{5}&Y_{5} + Y_{7}&- Y_{7}\\\\0&- Y_{3}&- Y_{8}&- Y_{6}&- Y_{7}&Y_{3} + Y_{6} + Y_{7} + Y_{8}\\end{array}\\right]$\n"
      ],
      "text/plain": [
       "6×6 Matrix{Sym}:\n",
       " Y₁ + Y₂             -Y₂          0  …          0                      0\n",
       "      -Y₂  Y₂ + Y₃ + Y₄       -Y₄             0                   -Y₃\n",
       "         0             -Y₄  Y₄ + Y₈             0                   -Y₈\n",
       "      -Y₁                0          0          -Y₅                   -Y₆\n",
       "         0                0          0     Y₅ + Y₇                   -Y₇\n",
       "         0             -Y₃       -Y₈  …       -Y₇  Y₃ + Y₆ + Y₇ + Y₈"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A' * Y * A"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Null space\n",
    "\n",
    "If we just say that the net current flowing out of each node is zero, we get the equation:\n",
    "$$\n",
    "A^T Y A v = 0\n",
    "$$\n",
    "or $v \\in N(A^T Y A) = N(A)$.\n",
    "\n",
    "It is an amazing and important fact that $N(A^T Y A) = N(A)$!!  (You saw a version of this in homework.)   Why is this?  Clearly, if $Ax = 0$ then $A^T Y Ax=0$.  But what about the converse?  Here is a trick: if $A^T Y Ax =0$, then $x^T A^T Y A x=0 = (Ax)^T Y (Ax)$.  Let $y=Ax$.  It is easy to see that $y^T Y y = \\sum_i Y_i y_i^2 = 0$ only if $y=0$, since all of the admittances $Y_i$ are positive.  (We will later say that $Y$ is a \"positive-definite matrix\".)  This means that $A^T Y Ax =0$ implies that $y=Ax=0$, which implies that $x \\in N(A)$.\n",
    "\n",
    "What is $N(A)$? The rank of $A$ is 5, so $N(A)$ must be **1-dimensional**.  A basis for it is:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6×1 Matrix{Float64}:\n",
       " 0.40824829046386296\n",
       " 0.4082482904638631\n",
       " 0.4082482904638628\n",
       " 0.40824829046386335\n",
       " 0.4082482904638631\n",
       " 0.40824829046386313"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nullspace(A)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "But this is, of course, just the space of vectors where **all voltages are equal**.   In hindsight, this should be obvious: if all the voltages are equal, then their difference are zero, and the currents are zero, and KCL is satisfied."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Current sources\n",
    "\n",
    "Of course, it is much more interesting to think about circuits when the currents are nonzero!\n",
    "\n",
    "To do this, we must consider a **source term** in the equations, and in particular we could try to solve\n",
    "\n",
    "$$\n",
    "A^T Y A v = s\n",
    "$$\n",
    "\n",
    "for some $s\\ne 0$.  What does $s$ represent?  It is precisely an **external source of current** flowing **out of each node**.\n",
    "\n",
    "For this to have a solution, however, we must have $s \\in C(A^T Y A) = N((A^T Y A)^T)^\\perp = N(A^T Y A)^\\perp = N(A)^\\perp$ (since $A^T Y A$ is symmetric, the left and right nullspaces are equal).  We know a basis for $N(A)$ from above, so this boils down to:\n",
    "\n",
    "$$\n",
    "\\begin{pmatrix} 1 & 1 & 1 & 1 & 1 & 1 \\end{pmatrix} s = 0 = \\sum_{i=1}^6 s_i\n",
    "$$\n",
    "\n",
    "That is, to have a solution, **all current that flows in must flow out**, so that the net current flowing into the circuit is zero.  This makes a lot of physical sense!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Just for fun, let's solve this circuit problem when the current is flowing **into node 2** and **out through node 1**, with slider controls for the 8 admittances, and label the edges with the currents."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "twodigits (generic function with 1 method)"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "twodigits(x) = round(x, digits=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.webio.node+json": {
       "children": [
        {
         "children": [
          {
           "children": [
            {
             "children": [
              {
               "children": [
                {
                 "children": [
                  "Y₁"
                 ],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "label"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "className": "interact ",
                  "style": {
                   "padding": "5px 10px 0px 10px"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-left"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "input"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}",
                   "orient": "horizontal",
                   "type": "range"
                  },
                  "className": "slider slider is-fullwidth",
                  "max": 100,
                  "min": 1,
                  "step": 1,
                  "style": {}
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-center"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "p"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "text: formatted_val"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-right"
               },
               "type": "node"
              }
             ],
             "instanceArgs": {
              "namespace": "html",
              "tag": "div"
             },
             "nodeType": "DOM",
             "props": {
              "className": "interact-flex-row interact-widget"
             },
             "type": "node"
            }
           ],
           "instanceArgs": {
            "handlers": {
             "changes": [
              "(function (val){return (val!=this.model[\"changes\"]()) ? (this.valueFromJulia[\"changes\"]=true, this.model[\"changes\"](val)) : undefined})"
             ],
             "index": [
              "(function (val){return (val!=this.model[\"index\"]()) ? (this.valueFromJulia[\"index\"]=true, this.model[\"index\"](val)) : undefined})"
             ]
            },
            "id": "5432103940800811028",
            "imports": {
             "data": [
              {
               "name": "knockout",
               "type": "js",
               "url": "/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js"
              },
              {
               "name": "knockout_punches",
               "type": "js",
               "url": "/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js"
              },
              {
               "name": null,
               "type": "js",
               "url": "/assetserver/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css"
              }
             ],
             "type": "async_block"
            },
            "mount_callbacks": [
             "function () {\n    var handler = (function (ko, koPunches) {\n    ko.punches.enableAll();\n    ko.bindingHandlers.numericValue = {\n        init: function(element, valueAccessor, allBindings, data, context) {\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\n            stringified.subscribe(function(value) {\n                var val = parseFloat(value);\n                if (!isNaN(val)) {\n                    valueAccessor()(val);\n                }\n            });\n            valueAccessor().subscribe(function(value) {\n                var str = JSON.stringify(value);\n                if ((str == \"0\") && ([\"-0\", \"-0.\"].indexOf(stringified()) >= 0))\n                     return;\n                 if ([\"null\", \"\"].indexOf(str) >= 0)\n                     return;\n                stringified(str);\n            });\n            ko.applyBindingsToNode(\n                element,\n                {\n                    value: stringified,\n                    valueUpdate: allBindings.get('valueUpdate'),\n                },\n                context,\n            );\n        }\n    };\n    var json_data = {\"formatted_vals\":[\"0.1\",\"0.2\",\"0.3\",\"0.4\",\"0.5\",\"0.6\",\"0.7\",\"0.8\",\"0.9\",\"1.0\",\"1.1\",\"1.2\",\"1.3\",\"1.4\",\"1.5\",\"1.6\",\"1.7\",\"1.8\",\"1.9\",\"2.0\",\"2.1\",\"2.2\",\"2.3\",\"2.4\",\"2.5\",\"2.6\",\"2.7\",\"2.8\",\"2.9\",\"3.0\",\"3.1\",\"3.2\",\"3.3\",\"3.4\",\"3.5\",\"3.6\",\"3.7\",\"3.8\",\"3.9\",\"4.0\",\"4.1\",\"4.2\",\"4.3\",\"4.4\",\"4.5\",\"4.6\",\"4.7\",\"4.8\",\"4.9\",\"5.0\",\"5.1\",\"5.2\",\"5.3\",\"5.4\",\"5.5\",\"5.6\",\"5.7\",\"5.8\",\"5.9\",\"6.0\",\"6.1\",\"6.2\",\"6.3\",\"6.4\",\"6.5\",\"6.6\",\"6.7\",\"6.8\",\"6.9\",\"7.0\",\"7.1\",\"7.2\",\"7.3\",\"7.4\",\"7.5\",\"7.6\",\"7.7\",\"7.8\",\"7.9\",\"8.0\",\"8.1\",\"8.2\",\"8.3\",\"8.4\",\"8.5\",\"8.6\",\"8.7\",\"8.8\",\"8.9\",\"9.0\",\"9.1\",\"9.2\",\"9.3\",\"9.4\",\"9.5\",\"9.6\",\"9.7\",\"9.8\",\"9.9\",\"10.0\"],\"changes\":WebIO.getval({\"name\":\"changes\",\"scope\":\"5432103940800811028\",\"id\":\"523688131832745273\",\"type\":\"observable\"}),\"index\":WebIO.getval({\"name\":\"index\",\"scope\":\"5432103940800811028\",\"id\":\"1932163917185879796\",\"type\":\"observable\"})};\n    var self = this;\n    function AppViewModel() {\n        for (var key in json_data) {\n            var el = json_data[key];\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\n        }\n        \n        [this[\"formatted_val\"]=ko.computed(    function(){\n        return this.formatted_vals()[parseInt(this.index())-(1)];\n    }\n,this)]\n        [this[\"changes\"].subscribe((function (val){!(this.valueFromJulia[\"changes\"]) ? (WebIO.setval({\"name\":\"changes\",\"scope\":\"5432103940800811028\",\"id\":\"523688131832745273\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"changes\"]=false}),self),this[\"index\"].subscribe((function (val){!(this.valueFromJulia[\"index\"]) ? (WebIO.setval({\"name\":\"index\",\"scope\":\"5432103940800811028\",\"id\":\"1932163917185879796\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"index\"]=false}),self)]\n        \n    }\n    self.model = new AppViewModel();\n    self.valueFromJulia = {};\n    for (var key in json_data) {\n        self.valueFromJulia[key] = false;\n    }\n    ko.applyBindings(self.model, self.dom);\n}\n);\n    (WebIO.importBlock({\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"}],\"type\":\"async_block\"})).then((imports) => handler.apply(this, imports));\n}\n"
            ],
            "observables": {
             "changes": {
              "id": "523688131832745273",
              "sync": false,
              "value": 0
             },
             "index": {
              "id": "1932163917185879796",
              "sync": true,
              "value": 50
             }
            },
            "systemjs_options": null
           },
           "nodeType": "Scope",
           "props": {},
           "type": "node"
          }
         ],
         "instanceArgs": {
          "namespace": "html",
          "tag": "div"
         },
         "nodeType": "DOM",
         "props": {
          "className": "field interact-widget"
         },
         "type": "node"
        },
        {
         "children": [
          {
           "children": [
            {
             "children": [
              {
               "children": [
                {
                 "children": [
                  "Y₂"
                 ],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "label"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "className": "interact ",
                  "style": {
                   "padding": "5px 10px 0px 10px"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-left"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "input"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}",
                   "orient": "horizontal",
                   "type": "range"
                  },
                  "className": "slider slider is-fullwidth",
                  "max": 100,
                  "min": 1,
                  "step": 1,
                  "style": {}
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-center"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "p"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "text: formatted_val"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-right"
               },
               "type": "node"
              }
             ],
             "instanceArgs": {
              "namespace": "html",
              "tag": "div"
             },
             "nodeType": "DOM",
             "props": {
              "className": "interact-flex-row interact-widget"
             },
             "type": "node"
            }
           ],
           "instanceArgs": {
            "handlers": {
             "changes": [
              "(function (val){return (val!=this.model[\"changes\"]()) ? (this.valueFromJulia[\"changes\"]=true, this.model[\"changes\"](val)) : undefined})"
             ],
             "index": [
              "(function (val){return (val!=this.model[\"index\"]()) ? (this.valueFromJulia[\"index\"]=true, this.model[\"index\"](val)) : undefined})"
             ]
            },
            "id": "1718417666948007598",
            "imports": {
             "data": [
              {
               "name": "knockout",
               "type": "js",
               "url": "/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js"
              },
              {
               "name": "knockout_punches",
               "type": "js",
               "url": "/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js"
              },
              {
               "name": null,
               "type": "js",
               "url": "/assetserver/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css"
              }
             ],
             "type": "async_block"
            },
            "mount_callbacks": [
             "function () {\n    var handler = (function (ko, koPunches) {\n    ko.punches.enableAll();\n    ko.bindingHandlers.numericValue = {\n        init: function(element, valueAccessor, allBindings, data, context) {\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\n            stringified.subscribe(function(value) {\n                var val = parseFloat(value);\n                if (!isNaN(val)) {\n                    valueAccessor()(val);\n                }\n            });\n            valueAccessor().subscribe(function(value) {\n                var str = JSON.stringify(value);\n                if ((str == \"0\") && ([\"-0\", \"-0.\"].indexOf(stringified()) >= 0))\n                     return;\n                 if ([\"null\", \"\"].indexOf(str) >= 0)\n                     return;\n                stringified(str);\n            });\n            ko.applyBindingsToNode(\n                element,\n                {\n                    value: stringified,\n                    valueUpdate: allBindings.get('valueUpdate'),\n                },\n                context,\n            );\n        }\n    };\n    var json_data = {\"formatted_vals\":[\"0.1\",\"0.2\",\"0.3\",\"0.4\",\"0.5\",\"0.6\",\"0.7\",\"0.8\",\"0.9\",\"1.0\",\"1.1\",\"1.2\",\"1.3\",\"1.4\",\"1.5\",\"1.6\",\"1.7\",\"1.8\",\"1.9\",\"2.0\",\"2.1\",\"2.2\",\"2.3\",\"2.4\",\"2.5\",\"2.6\",\"2.7\",\"2.8\",\"2.9\",\"3.0\",\"3.1\",\"3.2\",\"3.3\",\"3.4\",\"3.5\",\"3.6\",\"3.7\",\"3.8\",\"3.9\",\"4.0\",\"4.1\",\"4.2\",\"4.3\",\"4.4\",\"4.5\",\"4.6\",\"4.7\",\"4.8\",\"4.9\",\"5.0\",\"5.1\",\"5.2\",\"5.3\",\"5.4\",\"5.5\",\"5.6\",\"5.7\",\"5.8\",\"5.9\",\"6.0\",\"6.1\",\"6.2\",\"6.3\",\"6.4\",\"6.5\",\"6.6\",\"6.7\",\"6.8\",\"6.9\",\"7.0\",\"7.1\",\"7.2\",\"7.3\",\"7.4\",\"7.5\",\"7.6\",\"7.7\",\"7.8\",\"7.9\",\"8.0\",\"8.1\",\"8.2\",\"8.3\",\"8.4\",\"8.5\",\"8.6\",\"8.7\",\"8.8\",\"8.9\",\"9.0\",\"9.1\",\"9.2\",\"9.3\",\"9.4\",\"9.5\",\"9.6\",\"9.7\",\"9.8\",\"9.9\",\"10.0\"],\"changes\":WebIO.getval({\"name\":\"changes\",\"scope\":\"1718417666948007598\",\"id\":\"8725565259840982185\",\"type\":\"observable\"}),\"index\":WebIO.getval({\"name\":\"index\",\"scope\":\"1718417666948007598\",\"id\":\"3511672556481969786\",\"type\":\"observable\"})};\n    var self = this;\n    function AppViewModel() {\n        for (var key in json_data) {\n            var el = json_data[key];\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\n        }\n        \n        [this[\"formatted_val\"]=ko.computed(    function(){\n        return this.formatted_vals()[parseInt(this.index())-(1)];\n    }\n,this)]\n        [this[\"changes\"].subscribe((function (val){!(this.valueFromJulia[\"changes\"]) ? (WebIO.setval({\"name\":\"changes\",\"scope\":\"1718417666948007598\",\"id\":\"8725565259840982185\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"changes\"]=false}),self),this[\"index\"].subscribe((function (val){!(this.valueFromJulia[\"index\"]) ? (WebIO.setval({\"name\":\"index\",\"scope\":\"1718417666948007598\",\"id\":\"3511672556481969786\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"index\"]=false}),self)]\n        \n    }\n    self.model = new AppViewModel();\n    self.valueFromJulia = {};\n    for (var key in json_data) {\n        self.valueFromJulia[key] = false;\n    }\n    ko.applyBindings(self.model, self.dom);\n}\n);\n    (WebIO.importBlock({\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"}],\"type\":\"async_block\"})).then((imports) => handler.apply(this, imports));\n}\n"
            ],
            "observables": {
             "changes": {
              "id": "8725565259840982185",
              "sync": false,
              "value": 0
             },
             "index": {
              "id": "3511672556481969786",
              "sync": true,
              "value": 50
             }
            },
            "systemjs_options": null
           },
           "nodeType": "Scope",
           "props": {},
           "type": "node"
          }
         ],
         "instanceArgs": {
          "namespace": "html",
          "tag": "div"
         },
         "nodeType": "DOM",
         "props": {
          "className": "field interact-widget"
         },
         "type": "node"
        },
        {
         "children": [
          {
           "children": [
            {
             "children": [
              {
               "children": [
                {
                 "children": [
                  "Y₃"
                 ],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "label"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "className": "interact ",
                  "style": {
                   "padding": "5px 10px 0px 10px"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-left"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "input"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}",
                   "orient": "horizontal",
                   "type": "range"
                  },
                  "className": "slider slider is-fullwidth",
                  "max": 100,
                  "min": 1,
                  "step": 1,
                  "style": {}
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-center"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "p"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "text: formatted_val"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-right"
               },
               "type": "node"
              }
             ],
             "instanceArgs": {
              "namespace": "html",
              "tag": "div"
             },
             "nodeType": "DOM",
             "props": {
              "className": "interact-flex-row interact-widget"
             },
             "type": "node"
            }
           ],
           "instanceArgs": {
            "handlers": {
             "changes": [
              "(function (val){return (val!=this.model[\"changes\"]()) ? (this.valueFromJulia[\"changes\"]=true, this.model[\"changes\"](val)) : undefined})"
             ],
             "index": [
              "(function (val){return (val!=this.model[\"index\"]()) ? (this.valueFromJulia[\"index\"]=true, this.model[\"index\"](val)) : undefined})"
             ]
            },
            "id": "15970815832708533116",
            "imports": {
             "data": [
              {
               "name": "knockout",
               "type": "js",
               "url": "/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js"
              },
              {
               "name": "knockout_punches",
               "type": "js",
               "url": "/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js"
              },
              {
               "name": null,
               "type": "js",
               "url": "/assetserver/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css"
              }
             ],
             "type": "async_block"
            },
            "mount_callbacks": [
             "function () {\n    var handler = (function (ko, koPunches) {\n    ko.punches.enableAll();\n    ko.bindingHandlers.numericValue = {\n        init: function(element, valueAccessor, allBindings, data, context) {\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\n            stringified.subscribe(function(value) {\n                var val = parseFloat(value);\n                if (!isNaN(val)) {\n                    valueAccessor()(val);\n                }\n            });\n            valueAccessor().subscribe(function(value) {\n                var str = JSON.stringify(value);\n                if ((str == \"0\") && ([\"-0\", \"-0.\"].indexOf(stringified()) >= 0))\n                     return;\n                 if ([\"null\", \"\"].indexOf(str) >= 0)\n                     return;\n                stringified(str);\n            });\n            ko.applyBindingsToNode(\n                element,\n                {\n                    value: stringified,\n                    valueUpdate: allBindings.get('valueUpdate'),\n                },\n                context,\n            );\n        }\n    };\n    var json_data = {\"formatted_vals\":[\"0.1\",\"0.2\",\"0.3\",\"0.4\",\"0.5\",\"0.6\",\"0.7\",\"0.8\",\"0.9\",\"1.0\",\"1.1\",\"1.2\",\"1.3\",\"1.4\",\"1.5\",\"1.6\",\"1.7\",\"1.8\",\"1.9\",\"2.0\",\"2.1\",\"2.2\",\"2.3\",\"2.4\",\"2.5\",\"2.6\",\"2.7\",\"2.8\",\"2.9\",\"3.0\",\"3.1\",\"3.2\",\"3.3\",\"3.4\",\"3.5\",\"3.6\",\"3.7\",\"3.8\",\"3.9\",\"4.0\",\"4.1\",\"4.2\",\"4.3\",\"4.4\",\"4.5\",\"4.6\",\"4.7\",\"4.8\",\"4.9\",\"5.0\",\"5.1\",\"5.2\",\"5.3\",\"5.4\",\"5.5\",\"5.6\",\"5.7\",\"5.8\",\"5.9\",\"6.0\",\"6.1\",\"6.2\",\"6.3\",\"6.4\",\"6.5\",\"6.6\",\"6.7\",\"6.8\",\"6.9\",\"7.0\",\"7.1\",\"7.2\",\"7.3\",\"7.4\",\"7.5\",\"7.6\",\"7.7\",\"7.8\",\"7.9\",\"8.0\",\"8.1\",\"8.2\",\"8.3\",\"8.4\",\"8.5\",\"8.6\",\"8.7\",\"8.8\",\"8.9\",\"9.0\",\"9.1\",\"9.2\",\"9.3\",\"9.4\",\"9.5\",\"9.6\",\"9.7\",\"9.8\",\"9.9\",\"10.0\"],\"changes\":WebIO.getval({\"name\":\"changes\",\"scope\":\"15970815832708533116\",\"id\":\"2420044375029248402\",\"type\":\"observable\"}),\"index\":WebIO.getval({\"name\":\"index\",\"scope\":\"15970815832708533116\",\"id\":\"554882307497398093\",\"type\":\"observable\"})};\n    var self = this;\n    function AppViewModel() {\n        for (var key in json_data) {\n            var el = json_data[key];\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\n        }\n        \n        [this[\"formatted_val\"]=ko.computed(    function(){\n        return this.formatted_vals()[parseInt(this.index())-(1)];\n    }\n,this)]\n        [this[\"changes\"].subscribe((function (val){!(this.valueFromJulia[\"changes\"]) ? (WebIO.setval({\"name\":\"changes\",\"scope\":\"15970815832708533116\",\"id\":\"2420044375029248402\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"changes\"]=false}),self),this[\"index\"].subscribe((function (val){!(this.valueFromJulia[\"index\"]) ? (WebIO.setval({\"name\":\"index\",\"scope\":\"15970815832708533116\",\"id\":\"554882307497398093\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"index\"]=false}),self)]\n        \n    }\n    self.model = new AppViewModel();\n    self.valueFromJulia = {};\n    for (var key in json_data) {\n        self.valueFromJulia[key] = false;\n    }\n    ko.applyBindings(self.model, self.dom);\n}\n);\n    (WebIO.importBlock({\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"}],\"type\":\"async_block\"})).then((imports) => handler.apply(this, imports));\n}\n"
            ],
            "observables": {
             "changes": {
              "id": "2420044375029248402",
              "sync": false,
              "value": 0
             },
             "index": {
              "id": "554882307497398093",
              "sync": true,
              "value": 50
             }
            },
            "systemjs_options": null
           },
           "nodeType": "Scope",
           "props": {},
           "type": "node"
          }
         ],
         "instanceArgs": {
          "namespace": "html",
          "tag": "div"
         },
         "nodeType": "DOM",
         "props": {
          "className": "field interact-widget"
         },
         "type": "node"
        },
        {
         "children": [
          {
           "children": [
            {
             "children": [
              {
               "children": [
                {
                 "children": [
                  "Y₄"
                 ],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "label"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "className": "interact ",
                  "style": {
                   "padding": "5px 10px 0px 10px"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-left"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "input"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}",
                   "orient": "horizontal",
                   "type": "range"
                  },
                  "className": "slider slider is-fullwidth",
                  "max": 100,
                  "min": 1,
                  "step": 1,
                  "style": {}
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-center"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "p"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "text: formatted_val"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-right"
               },
               "type": "node"
              }
             ],
             "instanceArgs": {
              "namespace": "html",
              "tag": "div"
             },
             "nodeType": "DOM",
             "props": {
              "className": "interact-flex-row interact-widget"
             },
             "type": "node"
            }
           ],
           "instanceArgs": {
            "handlers": {
             "changes": [
              "(function (val){return (val!=this.model[\"changes\"]()) ? (this.valueFromJulia[\"changes\"]=true, this.model[\"changes\"](val)) : undefined})"
             ],
             "index": [
              "(function (val){return (val!=this.model[\"index\"]()) ? (this.valueFromJulia[\"index\"]=true, this.model[\"index\"](val)) : undefined})"
             ]
            },
            "id": "3780806694388362671",
            "imports": {
             "data": [
              {
               "name": "knockout",
               "type": "js",
               "url": "/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js"
              },
              {
               "name": "knockout_punches",
               "type": "js",
               "url": "/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js"
              },
              {
               "name": null,
               "type": "js",
               "url": "/assetserver/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css"
              }
             ],
             "type": "async_block"
            },
            "mount_callbacks": [
             "function () {\n    var handler = (function (ko, koPunches) {\n    ko.punches.enableAll();\n    ko.bindingHandlers.numericValue = {\n        init: function(element, valueAccessor, allBindings, data, context) {\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\n            stringified.subscribe(function(value) {\n                var val = parseFloat(value);\n                if (!isNaN(val)) {\n                    valueAccessor()(val);\n                }\n            });\n            valueAccessor().subscribe(function(value) {\n                var str = JSON.stringify(value);\n                if ((str == \"0\") && ([\"-0\", \"-0.\"].indexOf(stringified()) >= 0))\n                     return;\n                 if ([\"null\", \"\"].indexOf(str) >= 0)\n                     return;\n                stringified(str);\n            });\n            ko.applyBindingsToNode(\n                element,\n                {\n                    value: stringified,\n                    valueUpdate: allBindings.get('valueUpdate'),\n                },\n                context,\n            );\n        }\n    };\n    var json_data = {\"formatted_vals\":[\"0.1\",\"0.2\",\"0.3\",\"0.4\",\"0.5\",\"0.6\",\"0.7\",\"0.8\",\"0.9\",\"1.0\",\"1.1\",\"1.2\",\"1.3\",\"1.4\",\"1.5\",\"1.6\",\"1.7\",\"1.8\",\"1.9\",\"2.0\",\"2.1\",\"2.2\",\"2.3\",\"2.4\",\"2.5\",\"2.6\",\"2.7\",\"2.8\",\"2.9\",\"3.0\",\"3.1\",\"3.2\",\"3.3\",\"3.4\",\"3.5\",\"3.6\",\"3.7\",\"3.8\",\"3.9\",\"4.0\",\"4.1\",\"4.2\",\"4.3\",\"4.4\",\"4.5\",\"4.6\",\"4.7\",\"4.8\",\"4.9\",\"5.0\",\"5.1\",\"5.2\",\"5.3\",\"5.4\",\"5.5\",\"5.6\",\"5.7\",\"5.8\",\"5.9\",\"6.0\",\"6.1\",\"6.2\",\"6.3\",\"6.4\",\"6.5\",\"6.6\",\"6.7\",\"6.8\",\"6.9\",\"7.0\",\"7.1\",\"7.2\",\"7.3\",\"7.4\",\"7.5\",\"7.6\",\"7.7\",\"7.8\",\"7.9\",\"8.0\",\"8.1\",\"8.2\",\"8.3\",\"8.4\",\"8.5\",\"8.6\",\"8.7\",\"8.8\",\"8.9\",\"9.0\",\"9.1\",\"9.2\",\"9.3\",\"9.4\",\"9.5\",\"9.6\",\"9.7\",\"9.8\",\"9.9\",\"10.0\"],\"changes\":WebIO.getval({\"name\":\"changes\",\"scope\":\"3780806694388362671\",\"id\":\"16800950861448885590\",\"type\":\"observable\"}),\"index\":WebIO.getval({\"name\":\"index\",\"scope\":\"3780806694388362671\",\"id\":\"636691891107015737\",\"type\":\"observable\"})};\n    var self = this;\n    function AppViewModel() {\n        for (var key in json_data) {\n            var el = json_data[key];\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\n        }\n        \n        [this[\"formatted_val\"]=ko.computed(    function(){\n        return this.formatted_vals()[parseInt(this.index())-(1)];\n    }\n,this)]\n        [this[\"changes\"].subscribe((function (val){!(this.valueFromJulia[\"changes\"]) ? (WebIO.setval({\"name\":\"changes\",\"scope\":\"3780806694388362671\",\"id\":\"16800950861448885590\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"changes\"]=false}),self),this[\"index\"].subscribe((function (val){!(this.valueFromJulia[\"index\"]) ? (WebIO.setval({\"name\":\"index\",\"scope\":\"3780806694388362671\",\"id\":\"636691891107015737\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"index\"]=false}),self)]\n        \n    }\n    self.model = new AppViewModel();\n    self.valueFromJulia = {};\n    for (var key in json_data) {\n        self.valueFromJulia[key] = false;\n    }\n    ko.applyBindings(self.model, self.dom);\n}\n);\n    (WebIO.importBlock({\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"}],\"type\":\"async_block\"})).then((imports) => handler.apply(this, imports));\n}\n"
            ],
            "observables": {
             "changes": {
              "id": "16800950861448885590",
              "sync": false,
              "value": 0
             },
             "index": {
              "id": "636691891107015737",
              "sync": true,
              "value": 50
             }
            },
            "systemjs_options": null
           },
           "nodeType": "Scope",
           "props": {},
           "type": "node"
          }
         ],
         "instanceArgs": {
          "namespace": "html",
          "tag": "div"
         },
         "nodeType": "DOM",
         "props": {
          "className": "field interact-widget"
         },
         "type": "node"
        },
        {
         "children": [
          {
           "children": [
            {
             "children": [
              {
               "children": [
                {
                 "children": [
                  "Y₅"
                 ],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "label"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "className": "interact ",
                  "style": {
                   "padding": "5px 10px 0px 10px"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-left"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "input"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}",
                   "orient": "horizontal",
                   "type": "range"
                  },
                  "className": "slider slider is-fullwidth",
                  "max": 100,
                  "min": 1,
                  "step": 1,
                  "style": {}
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-center"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "p"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "text: formatted_val"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-right"
               },
               "type": "node"
              }
             ],
             "instanceArgs": {
              "namespace": "html",
              "tag": "div"
             },
             "nodeType": "DOM",
             "props": {
              "className": "interact-flex-row interact-widget"
             },
             "type": "node"
            }
           ],
           "instanceArgs": {
            "handlers": {
             "changes": [
              "(function (val){return (val!=this.model[\"changes\"]()) ? (this.valueFromJulia[\"changes\"]=true, this.model[\"changes\"](val)) : undefined})"
             ],
             "index": [
              "(function (val){return (val!=this.model[\"index\"]()) ? (this.valueFromJulia[\"index\"]=true, this.model[\"index\"](val)) : undefined})"
             ]
            },
            "id": "6128907041811942585",
            "imports": {
             "data": [
              {
               "name": "knockout",
               "type": "js",
               "url": "/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js"
              },
              {
               "name": "knockout_punches",
               "type": "js",
               "url": "/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js"
              },
              {
               "name": null,
               "type": "js",
               "url": "/assetserver/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css"
              }
             ],
             "type": "async_block"
            },
            "mount_callbacks": [
             "function () {\n    var handler = (function (ko, koPunches) {\n    ko.punches.enableAll();\n    ko.bindingHandlers.numericValue = {\n        init: function(element, valueAccessor, allBindings, data, context) {\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\n            stringified.subscribe(function(value) {\n                var val = parseFloat(value);\n                if (!isNaN(val)) {\n                    valueAccessor()(val);\n                }\n            });\n            valueAccessor().subscribe(function(value) {\n                var str = JSON.stringify(value);\n                if ((str == \"0\") && ([\"-0\", \"-0.\"].indexOf(stringified()) >= 0))\n                     return;\n                 if ([\"null\", \"\"].indexOf(str) >= 0)\n                     return;\n                stringified(str);\n            });\n            ko.applyBindingsToNode(\n                element,\n                {\n                    value: stringified,\n                    valueUpdate: allBindings.get('valueUpdate'),\n                },\n                context,\n            );\n        }\n    };\n    var json_data = {\"formatted_vals\":[\"0.1\",\"0.2\",\"0.3\",\"0.4\",\"0.5\",\"0.6\",\"0.7\",\"0.8\",\"0.9\",\"1.0\",\"1.1\",\"1.2\",\"1.3\",\"1.4\",\"1.5\",\"1.6\",\"1.7\",\"1.8\",\"1.9\",\"2.0\",\"2.1\",\"2.2\",\"2.3\",\"2.4\",\"2.5\",\"2.6\",\"2.7\",\"2.8\",\"2.9\",\"3.0\",\"3.1\",\"3.2\",\"3.3\",\"3.4\",\"3.5\",\"3.6\",\"3.7\",\"3.8\",\"3.9\",\"4.0\",\"4.1\",\"4.2\",\"4.3\",\"4.4\",\"4.5\",\"4.6\",\"4.7\",\"4.8\",\"4.9\",\"5.0\",\"5.1\",\"5.2\",\"5.3\",\"5.4\",\"5.5\",\"5.6\",\"5.7\",\"5.8\",\"5.9\",\"6.0\",\"6.1\",\"6.2\",\"6.3\",\"6.4\",\"6.5\",\"6.6\",\"6.7\",\"6.8\",\"6.9\",\"7.0\",\"7.1\",\"7.2\",\"7.3\",\"7.4\",\"7.5\",\"7.6\",\"7.7\",\"7.8\",\"7.9\",\"8.0\",\"8.1\",\"8.2\",\"8.3\",\"8.4\",\"8.5\",\"8.6\",\"8.7\",\"8.8\",\"8.9\",\"9.0\",\"9.1\",\"9.2\",\"9.3\",\"9.4\",\"9.5\",\"9.6\",\"9.7\",\"9.8\",\"9.9\",\"10.0\"],\"changes\":WebIO.getval({\"name\":\"changes\",\"scope\":\"6128907041811942585\",\"id\":\"15585748669024378077\",\"type\":\"observable\"}),\"index\":WebIO.getval({\"name\":\"index\",\"scope\":\"6128907041811942585\",\"id\":\"16496876739494999155\",\"type\":\"observable\"})};\n    var self = this;\n    function AppViewModel() {\n        for (var key in json_data) {\n            var el = json_data[key];\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\n        }\n        \n        [this[\"formatted_val\"]=ko.computed(    function(){\n        return this.formatted_vals()[parseInt(this.index())-(1)];\n    }\n,this)]\n        [this[\"changes\"].subscribe((function (val){!(this.valueFromJulia[\"changes\"]) ? (WebIO.setval({\"name\":\"changes\",\"scope\":\"6128907041811942585\",\"id\":\"15585748669024378077\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"changes\"]=false}),self),this[\"index\"].subscribe((function (val){!(this.valueFromJulia[\"index\"]) ? (WebIO.setval({\"name\":\"index\",\"scope\":\"6128907041811942585\",\"id\":\"16496876739494999155\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"index\"]=false}),self)]\n        \n    }\n    self.model = new AppViewModel();\n    self.valueFromJulia = {};\n    for (var key in json_data) {\n        self.valueFromJulia[key] = false;\n    }\n    ko.applyBindings(self.model, self.dom);\n}\n);\n    (WebIO.importBlock({\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"}],\"type\":\"async_block\"})).then((imports) => handler.apply(this, imports));\n}\n"
            ],
            "observables": {
             "changes": {
              "id": "15585748669024378077",
              "sync": false,
              "value": 0
             },
             "index": {
              "id": "16496876739494999155",
              "sync": true,
              "value": 50
             }
            },
            "systemjs_options": null
           },
           "nodeType": "Scope",
           "props": {},
           "type": "node"
          }
         ],
         "instanceArgs": {
          "namespace": "html",
          "tag": "div"
         },
         "nodeType": "DOM",
         "props": {
          "className": "field interact-widget"
         },
         "type": "node"
        },
        {
         "children": [
          {
           "children": [
            {
             "children": [
              {
               "children": [
                {
                 "children": [
                  "Y₆"
                 ],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "label"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "className": "interact ",
                  "style": {
                   "padding": "5px 10px 0px 10px"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-left"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "input"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}",
                   "orient": "horizontal",
                   "type": "range"
                  },
                  "className": "slider slider is-fullwidth",
                  "max": 100,
                  "min": 1,
                  "step": 1,
                  "style": {}
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-center"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "p"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "text: formatted_val"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-right"
               },
               "type": "node"
              }
             ],
             "instanceArgs": {
              "namespace": "html",
              "tag": "div"
             },
             "nodeType": "DOM",
             "props": {
              "className": "interact-flex-row interact-widget"
             },
             "type": "node"
            }
           ],
           "instanceArgs": {
            "handlers": {
             "changes": [
              "(function (val){return (val!=this.model[\"changes\"]()) ? (this.valueFromJulia[\"changes\"]=true, this.model[\"changes\"](val)) : undefined})"
             ],
             "index": [
              "(function (val){return (val!=this.model[\"index\"]()) ? (this.valueFromJulia[\"index\"]=true, this.model[\"index\"](val)) : undefined})"
             ]
            },
            "id": "7909771970869587988",
            "imports": {
             "data": [
              {
               "name": "knockout",
               "type": "js",
               "url": "/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js"
              },
              {
               "name": "knockout_punches",
               "type": "js",
               "url": "/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js"
              },
              {
               "name": null,
               "type": "js",
               "url": "/assetserver/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css"
              }
             ],
             "type": "async_block"
            },
            "mount_callbacks": [
             "function () {\n    var handler = (function (ko, koPunches) {\n    ko.punches.enableAll();\n    ko.bindingHandlers.numericValue = {\n        init: function(element, valueAccessor, allBindings, data, context) {\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\n            stringified.subscribe(function(value) {\n                var val = parseFloat(value);\n                if (!isNaN(val)) {\n                    valueAccessor()(val);\n                }\n            });\n            valueAccessor().subscribe(function(value) {\n                var str = JSON.stringify(value);\n                if ((str == \"0\") && ([\"-0\", \"-0.\"].indexOf(stringified()) >= 0))\n                     return;\n                 if ([\"null\", \"\"].indexOf(str) >= 0)\n                     return;\n                stringified(str);\n            });\n            ko.applyBindingsToNode(\n                element,\n                {\n                    value: stringified,\n                    valueUpdate: allBindings.get('valueUpdate'),\n                },\n                context,\n            );\n        }\n    };\n    var json_data = {\"formatted_vals\":[\"0.1\",\"0.2\",\"0.3\",\"0.4\",\"0.5\",\"0.6\",\"0.7\",\"0.8\",\"0.9\",\"1.0\",\"1.1\",\"1.2\",\"1.3\",\"1.4\",\"1.5\",\"1.6\",\"1.7\",\"1.8\",\"1.9\",\"2.0\",\"2.1\",\"2.2\",\"2.3\",\"2.4\",\"2.5\",\"2.6\",\"2.7\",\"2.8\",\"2.9\",\"3.0\",\"3.1\",\"3.2\",\"3.3\",\"3.4\",\"3.5\",\"3.6\",\"3.7\",\"3.8\",\"3.9\",\"4.0\",\"4.1\",\"4.2\",\"4.3\",\"4.4\",\"4.5\",\"4.6\",\"4.7\",\"4.8\",\"4.9\",\"5.0\",\"5.1\",\"5.2\",\"5.3\",\"5.4\",\"5.5\",\"5.6\",\"5.7\",\"5.8\",\"5.9\",\"6.0\",\"6.1\",\"6.2\",\"6.3\",\"6.4\",\"6.5\",\"6.6\",\"6.7\",\"6.8\",\"6.9\",\"7.0\",\"7.1\",\"7.2\",\"7.3\",\"7.4\",\"7.5\",\"7.6\",\"7.7\",\"7.8\",\"7.9\",\"8.0\",\"8.1\",\"8.2\",\"8.3\",\"8.4\",\"8.5\",\"8.6\",\"8.7\",\"8.8\",\"8.9\",\"9.0\",\"9.1\",\"9.2\",\"9.3\",\"9.4\",\"9.5\",\"9.6\",\"9.7\",\"9.8\",\"9.9\",\"10.0\"],\"changes\":WebIO.getval({\"name\":\"changes\",\"scope\":\"7909771970869587988\",\"id\":\"16774039972888896363\",\"type\":\"observable\"}),\"index\":WebIO.getval({\"name\":\"index\",\"scope\":\"7909771970869587988\",\"id\":\"9956793018930867036\",\"type\":\"observable\"})};\n    var self = this;\n    function AppViewModel() {\n        for (var key in json_data) {\n            var el = json_data[key];\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\n        }\n        \n        [this[\"formatted_val\"]=ko.computed(    function(){\n        return this.formatted_vals()[parseInt(this.index())-(1)];\n    }\n,this)]\n        [this[\"changes\"].subscribe((function (val){!(this.valueFromJulia[\"changes\"]) ? (WebIO.setval({\"name\":\"changes\",\"scope\":\"7909771970869587988\",\"id\":\"16774039972888896363\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"changes\"]=false}),self),this[\"index\"].subscribe((function (val){!(this.valueFromJulia[\"index\"]) ? (WebIO.setval({\"name\":\"index\",\"scope\":\"7909771970869587988\",\"id\":\"9956793018930867036\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"index\"]=false}),self)]\n        \n    }\n    self.model = new AppViewModel();\n    self.valueFromJulia = {};\n    for (var key in json_data) {\n        self.valueFromJulia[key] = false;\n    }\n    ko.applyBindings(self.model, self.dom);\n}\n);\n    (WebIO.importBlock({\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"}],\"type\":\"async_block\"})).then((imports) => handler.apply(this, imports));\n}\n"
            ],
            "observables": {
             "changes": {
              "id": "16774039972888896363",
              "sync": false,
              "value": 0
             },
             "index": {
              "id": "9956793018930867036",
              "sync": true,
              "value": 50
             }
            },
            "systemjs_options": null
           },
           "nodeType": "Scope",
           "props": {},
           "type": "node"
          }
         ],
         "instanceArgs": {
          "namespace": "html",
          "tag": "div"
         },
         "nodeType": "DOM",
         "props": {
          "className": "field interact-widget"
         },
         "type": "node"
        },
        {
         "children": [
          {
           "children": [
            {
             "children": [
              {
               "children": [
                {
                 "children": [
                  "Y₇"
                 ],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "label"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "className": "interact ",
                  "style": {
                   "padding": "5px 10px 0px 10px"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-left"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "input"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}",
                   "orient": "horizontal",
                   "type": "range"
                  },
                  "className": "slider slider is-fullwidth",
                  "max": 100,
                  "min": 1,
                  "step": 1,
                  "style": {}
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-center"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "p"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "text: formatted_val"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-right"
               },
               "type": "node"
              }
             ],
             "instanceArgs": {
              "namespace": "html",
              "tag": "div"
             },
             "nodeType": "DOM",
             "props": {
              "className": "interact-flex-row interact-widget"
             },
             "type": "node"
            }
           ],
           "instanceArgs": {
            "handlers": {
             "changes": [
              "(function (val){return (val!=this.model[\"changes\"]()) ? (this.valueFromJulia[\"changes\"]=true, this.model[\"changes\"](val)) : undefined})"
             ],
             "index": [
              "(function (val){return (val!=this.model[\"index\"]()) ? (this.valueFromJulia[\"index\"]=true, this.model[\"index\"](val)) : undefined})"
             ]
            },
            "id": "8740962986163213682",
            "imports": {
             "data": [
              {
               "name": "knockout",
               "type": "js",
               "url": "/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js"
              },
              {
               "name": "knockout_punches",
               "type": "js",
               "url": "/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js"
              },
              {
               "name": null,
               "type": "js",
               "url": "/assetserver/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css"
              }
             ],
             "type": "async_block"
            },
            "mount_callbacks": [
             "function () {\n    var handler = (function (ko, koPunches) {\n    ko.punches.enableAll();\n    ko.bindingHandlers.numericValue = {\n        init: function(element, valueAccessor, allBindings, data, context) {\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\n            stringified.subscribe(function(value) {\n                var val = parseFloat(value);\n                if (!isNaN(val)) {\n                    valueAccessor()(val);\n                }\n            });\n            valueAccessor().subscribe(function(value) {\n                var str = JSON.stringify(value);\n                if ((str == \"0\") && ([\"-0\", \"-0.\"].indexOf(stringified()) >= 0))\n                     return;\n                 if ([\"null\", \"\"].indexOf(str) >= 0)\n                     return;\n                stringified(str);\n            });\n            ko.applyBindingsToNode(\n                element,\n                {\n                    value: stringified,\n                    valueUpdate: allBindings.get('valueUpdate'),\n                },\n                context,\n            );\n        }\n    };\n    var json_data = {\"formatted_vals\":[\"0.1\",\"0.2\",\"0.3\",\"0.4\",\"0.5\",\"0.6\",\"0.7\",\"0.8\",\"0.9\",\"1.0\",\"1.1\",\"1.2\",\"1.3\",\"1.4\",\"1.5\",\"1.6\",\"1.7\",\"1.8\",\"1.9\",\"2.0\",\"2.1\",\"2.2\",\"2.3\",\"2.4\",\"2.5\",\"2.6\",\"2.7\",\"2.8\",\"2.9\",\"3.0\",\"3.1\",\"3.2\",\"3.3\",\"3.4\",\"3.5\",\"3.6\",\"3.7\",\"3.8\",\"3.9\",\"4.0\",\"4.1\",\"4.2\",\"4.3\",\"4.4\",\"4.5\",\"4.6\",\"4.7\",\"4.8\",\"4.9\",\"5.0\",\"5.1\",\"5.2\",\"5.3\",\"5.4\",\"5.5\",\"5.6\",\"5.7\",\"5.8\",\"5.9\",\"6.0\",\"6.1\",\"6.2\",\"6.3\",\"6.4\",\"6.5\",\"6.6\",\"6.7\",\"6.8\",\"6.9\",\"7.0\",\"7.1\",\"7.2\",\"7.3\",\"7.4\",\"7.5\",\"7.6\",\"7.7\",\"7.8\",\"7.9\",\"8.0\",\"8.1\",\"8.2\",\"8.3\",\"8.4\",\"8.5\",\"8.6\",\"8.7\",\"8.8\",\"8.9\",\"9.0\",\"9.1\",\"9.2\",\"9.3\",\"9.4\",\"9.5\",\"9.6\",\"9.7\",\"9.8\",\"9.9\",\"10.0\"],\"changes\":WebIO.getval({\"name\":\"changes\",\"scope\":\"8740962986163213682\",\"id\":\"10158758216819727422\",\"type\":\"observable\"}),\"index\":WebIO.getval({\"name\":\"index\",\"scope\":\"8740962986163213682\",\"id\":\"16039901869771518637\",\"type\":\"observable\"})};\n    var self = this;\n    function AppViewModel() {\n        for (var key in json_data) {\n            var el = json_data[key];\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\n        }\n        \n        [this[\"formatted_val\"]=ko.computed(    function(){\n        return this.formatted_vals()[parseInt(this.index())-(1)];\n    }\n,this)]\n        [this[\"changes\"].subscribe((function (val){!(this.valueFromJulia[\"changes\"]) ? (WebIO.setval({\"name\":\"changes\",\"scope\":\"8740962986163213682\",\"id\":\"10158758216819727422\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"changes\"]=false}),self),this[\"index\"].subscribe((function (val){!(this.valueFromJulia[\"index\"]) ? (WebIO.setval({\"name\":\"index\",\"scope\":\"8740962986163213682\",\"id\":\"16039901869771518637\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"index\"]=false}),self)]\n        \n    }\n    self.model = new AppViewModel();\n    self.valueFromJulia = {};\n    for (var key in json_data) {\n        self.valueFromJulia[key] = false;\n    }\n    ko.applyBindings(self.model, self.dom);\n}\n);\n    (WebIO.importBlock({\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"}],\"type\":\"async_block\"})).then((imports) => handler.apply(this, imports));\n}\n"
            ],
            "observables": {
             "changes": {
              "id": "10158758216819727422",
              "sync": false,
              "value": 0
             },
             "index": {
              "id": "16039901869771518637",
              "sync": true,
              "value": 50
             }
            },
            "systemjs_options": null
           },
           "nodeType": "Scope",
           "props": {},
           "type": "node"
          }
         ],
         "instanceArgs": {
          "namespace": "html",
          "tag": "div"
         },
         "nodeType": "DOM",
         "props": {
          "className": "field interact-widget"
         },
         "type": "node"
        },
        {
         "children": [
          {
           "children": [
            {
             "children": [
              {
               "children": [
                {
                 "children": [
                  "Y₈"
                 ],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "label"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "className": "interact ",
                  "style": {
                   "padding": "5px 10px 0px 10px"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-left"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "input"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}",
                   "orient": "horizontal",
                   "type": "range"
                  },
                  "className": "slider slider is-fullwidth",
                  "max": 100,
                  "min": 1,
                  "step": 1,
                  "style": {}
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-center"
               },
               "type": "node"
              },
              {
               "children": [
                {
                 "children": [],
                 "instanceArgs": {
                  "namespace": "html",
                  "tag": "p"
                 },
                 "nodeType": "DOM",
                 "props": {
                  "attributes": {
                   "data-bind": "text: formatted_val"
                  }
                 },
                 "type": "node"
                }
               ],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "className": "interact-flex-row-right"
               },
               "type": "node"
              }
             ],
             "instanceArgs": {
              "namespace": "html",
              "tag": "div"
             },
             "nodeType": "DOM",
             "props": {
              "className": "interact-flex-row interact-widget"
             },
             "type": "node"
            }
           ],
           "instanceArgs": {
            "handlers": {
             "changes": [
              "(function (val){return (val!=this.model[\"changes\"]()) ? (this.valueFromJulia[\"changes\"]=true, this.model[\"changes\"](val)) : undefined})"
             ],
             "index": [
              "(function (val){return (val!=this.model[\"index\"]()) ? (this.valueFromJulia[\"index\"]=true, this.model[\"index\"](val)) : undefined})"
             ]
            },
            "id": "4003882290061871992",
            "imports": {
             "data": [
              {
               "name": "knockout",
               "type": "js",
               "url": "/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js"
              },
              {
               "name": "knockout_punches",
               "type": "js",
               "url": "/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js"
              },
              {
               "name": null,
               "type": "js",
               "url": "/assetserver/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css"
              },
              {
               "name": null,
               "type": "css",
               "url": "/assetserver/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css"
              }
             ],
             "type": "async_block"
            },
            "mount_callbacks": [
             "function () {\n    var handler = (function (ko, koPunches) {\n    ko.punches.enableAll();\n    ko.bindingHandlers.numericValue = {\n        init: function(element, valueAccessor, allBindings, data, context) {\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\n            stringified.subscribe(function(value) {\n                var val = parseFloat(value);\n                if (!isNaN(val)) {\n                    valueAccessor()(val);\n                }\n            });\n            valueAccessor().subscribe(function(value) {\n                var str = JSON.stringify(value);\n                if ((str == \"0\") && ([\"-0\", \"-0.\"].indexOf(stringified()) >= 0))\n                     return;\n                 if ([\"null\", \"\"].indexOf(str) >= 0)\n                     return;\n                stringified(str);\n            });\n            ko.applyBindingsToNode(\n                element,\n                {\n                    value: stringified,\n                    valueUpdate: allBindings.get('valueUpdate'),\n                },\n                context,\n            );\n        }\n    };\n    var json_data = {\"formatted_vals\":[\"0.1\",\"0.2\",\"0.3\",\"0.4\",\"0.5\",\"0.6\",\"0.7\",\"0.8\",\"0.9\",\"1.0\",\"1.1\",\"1.2\",\"1.3\",\"1.4\",\"1.5\",\"1.6\",\"1.7\",\"1.8\",\"1.9\",\"2.0\",\"2.1\",\"2.2\",\"2.3\",\"2.4\",\"2.5\",\"2.6\",\"2.7\",\"2.8\",\"2.9\",\"3.0\",\"3.1\",\"3.2\",\"3.3\",\"3.4\",\"3.5\",\"3.6\",\"3.7\",\"3.8\",\"3.9\",\"4.0\",\"4.1\",\"4.2\",\"4.3\",\"4.4\",\"4.5\",\"4.6\",\"4.7\",\"4.8\",\"4.9\",\"5.0\",\"5.1\",\"5.2\",\"5.3\",\"5.4\",\"5.5\",\"5.6\",\"5.7\",\"5.8\",\"5.9\",\"6.0\",\"6.1\",\"6.2\",\"6.3\",\"6.4\",\"6.5\",\"6.6\",\"6.7\",\"6.8\",\"6.9\",\"7.0\",\"7.1\",\"7.2\",\"7.3\",\"7.4\",\"7.5\",\"7.6\",\"7.7\",\"7.8\",\"7.9\",\"8.0\",\"8.1\",\"8.2\",\"8.3\",\"8.4\",\"8.5\",\"8.6\",\"8.7\",\"8.8\",\"8.9\",\"9.0\",\"9.1\",\"9.2\",\"9.3\",\"9.4\",\"9.5\",\"9.6\",\"9.7\",\"9.8\",\"9.9\",\"10.0\"],\"changes\":WebIO.getval({\"name\":\"changes\",\"scope\":\"4003882290061871992\",\"id\":\"11487652428459938951\",\"type\":\"observable\"}),\"index\":WebIO.getval({\"name\":\"index\",\"scope\":\"4003882290061871992\",\"id\":\"10134177006576795128\",\"type\":\"observable\"})};\n    var self = this;\n    function AppViewModel() {\n        for (var key in json_data) {\n            var el = json_data[key];\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\n        }\n        \n        [this[\"formatted_val\"]=ko.computed(    function(){\n        return this.formatted_vals()[parseInt(this.index())-(1)];\n    }\n,this)]\n        [this[\"changes\"].subscribe((function (val){!(this.valueFromJulia[\"changes\"]) ? (WebIO.setval({\"name\":\"changes\",\"scope\":\"4003882290061871992\",\"id\":\"11487652428459938951\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"changes\"]=false}),self),this[\"index\"].subscribe((function (val){!(this.valueFromJulia[\"index\"]) ? (WebIO.setval({\"name\":\"index\",\"scope\":\"4003882290061871992\",\"id\":\"10134177006576795128\",\"type\":\"observable\"},val)) : undefined; return this.valueFromJulia[\"index\"]=false}),self)]\n        \n    }\n    self.model = new AppViewModel();\n    self.valueFromJulia = {};\n    for (var key in json_data) {\n        self.valueFromJulia[key] = false;\n    }\n    ko.applyBindings(self.model, self.dom);\n}\n);\n    (WebIO.importBlock({\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"}],\"type\":\"async_block\"})).then((imports) => handler.apply(this, imports));\n}\n"
            ],
            "observables": {
             "changes": {
              "id": "11487652428459938951",
              "sync": false,
              "value": 0
             },
             "index": {
              "id": "10134177006576795128",
              "sync": true,
              "value": 50
             }
            },
            "systemjs_options": null
           },
           "nodeType": "Scope",
           "props": {},
           "type": "node"
          }
         ],
         "instanceArgs": {
          "namespace": "html",
          "tag": "div"
         },
         "nodeType": "DOM",
         "props": {
          "className": "field interact-widget"
         },
         "type": "node"
        },
        {
         "children": [
          {
           "children": [],
           "instanceArgs": {
            "id": "5333283363638451252",
            "name": "obs-node"
           },
           "nodeType": "ObservableNode",
           "props": {},
           "type": "node"
          }
         ],
         "instanceArgs": {
          "handlers": {},
          "id": "941155555585390175",
          "imports": {
           "data": [],
           "type": "async_block"
          },
          "mount_callbacks": [],
          "observables": {
           "obs-node": {
            "id": "5333283363638451252",
            "sync": false,
            "value": {
             "children": [
              {
               "children": [],
               "instanceArgs": {
                "namespace": "html",
                "tag": "div"
               },
               "nodeType": "DOM",
               "props": {
                "setInnerHtml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg xmlns=\"http://www.w3.org/2000/svg\"\n     xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n     version=\"1.2\"\n     width=\"141.42mm\" height=\"100mm\" viewBox=\"0 0 141.42 100\"\n     stroke=\"none\"\n     fill=\"#000000\"\n     stroke-width=\"0.3\"\n     font-size=\"3.88\"\n>\n<defs>\n  <marker id=\"arrow\" markerWidth=\"15\" markerHeight=\"7\" refX=\"5\" refY=\"3.5\" orient=\"auto\" markerUnits=\"strokeWidth\">\n    <path d=\"M0,0 L15,3.5 L0,7 z\" stroke=\"context-stroke\" fill=\"context-stroke\"/>\n  </marker>\n</defs>\n<g stroke-width=\"1.22\" fill=\"#000000\" fill-opacity=\"0.000\" id=\"img-415b4171-1\">\n  <g transform=\"translate(101.62,69.71)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M22.98,-10.57 L-22.98,10.57 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(106.66,40.76)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-18.7,-13.08 L18.7,13.08 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(58.22,37.58)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M20.58,-10.42 L-20.58,10.42 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(55.5,16.51)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-22.63,-6.56 L22.63,6.56 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(42.69,87.13)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M25.02,-3.67 L-25.02,3.67 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(53.18,66.53)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M16.4,12.9 L-16.4,-12.9 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(22.27,71.07)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-8.45,16.59 L8.45,-16.59 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(30.03,29.41)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M2.18,16.84 L-2.18,-16.84 \" class=\"primitive\"/>\n  </g>\n</g>\n<g stroke-width=\"1.22\" id=\"img-415b4171-2\">\n  <g transform=\"translate(81.74,78.85)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M2.65,0.48 L-3.09,1.42 0.45,-1.91 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(122.74,52)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M0.1,-1.93 L2.62,1.84 -2.73,0.1 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(40.64,46.48)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M2.67,0.4 L-3,1.52 0.33,-1.92 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(74.71,22.08)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-0.94,-1.81 L3.42,0.99 -2.47,0.82 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(21.29,90.27)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M2.22,1.13 L-3.61,0.53 1.4,-1.66 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(39.24,55.58)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-0.26,1.92 L-2.47,-1.94 2.73,0.02 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(29.46,56.93)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-2.52,0.75 L1.25,-2.46 1.27,1.71 \" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(28.19,15.17)\" stroke=\"#D3D3D3\">\n    <path fill=\"none\" d=\"M-1.84,1.43 L-0.34,-2.6 2.18,1.17 \" class=\"primitive\"/>\n  </g>\n</g>\n<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-415b4171-3\">\n  <g transform=\"translate(87.61,76.15)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">i₁ = -0.3</text>\n    </g>\n  </g>\n  <g transform=\"translate(118.15,48.79)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">i₂ = 0.7</text>\n    </g>\n  </g>\n  <g transform=\"translate(45.49,44.03)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">i₃ = 0.2</text>\n    </g>\n  </g>\n  <g transform=\"translate(69.59,20.6)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">i₄ = -0.1</text>\n    </g>\n  </g>\n  <g transform=\"translate(27.24,89.4)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">i₅ = -0.1</text>\n    </g>\n  </g>\n  <g transform=\"translate(42.96,58.51)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">i₆ = -0.2</text>\n    </g>\n  </g>\n  <g transform=\"translate(27.51,60.77)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">i₇ = -0.1</text>\n    </g>\n  </g>\n  <g transform=\"translate(28.66,18.87)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">i₈ = -0.1</text>\n    </g>\n  </g>\n</g>\n<g stroke-width=\"0\" stroke=\"#000000\" stroke-opacity=\"0.000\" id=\"img-415b4171-4\">\n  <g transform=\"translate(129.64,56.82)\" fill=\"#FF0000\">\n    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(83.69,24.69)\" fill=\"#FF0000\">\n    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(27.3,8.33)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(73.6,82.59)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(11.79,91.67)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n  </g>\n  <g transform=\"translate(32.75,50.48)\" fill=\"#808080\">\n    <circle cx=\"0\" cy=\"0\" r=\"5.77\" class=\"primitive\"/>\n  </g>\n</g>\n<g font-size=\"4\" stroke=\"#000000\" stroke-opacity=\"0.000\" fill=\"#000000\" id=\"img-415b4171-5\">\n  <g transform=\"translate(129.64,56.82)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">1</text>\n    </g>\n  </g>\n  <g transform=\"translate(83.69,24.69)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">2</text>\n    </g>\n  </g>\n  <g transform=\"translate(27.3,8.33)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">3</text>\n    </g>\n  </g>\n  <g transform=\"translate(73.6,82.59)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">4</text>\n    </g>\n  </g>\n  <g transform=\"translate(11.79,91.67)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">5</text>\n    </g>\n  </g>\n  <g transform=\"translate(32.75,50.48)\">\n    <g class=\"primitive\">\n      <text text-anchor=\"middle\" dy=\"0.35em\">6</text>\n    </g>\n  </g>\n</g>\n</svg>\n"
               },
               "type": "node"
              }
             ],
             "instanceArgs": {
              "namespace": "html",
              "tag": "div"
             },
             "nodeType": "DOM",
             "props": {
              "className": "interact-flex-row interact-widget"
             },
             "type": "node"
            }
           }
          },
          "systemjs_options": null
         },
         "nodeType": "Scope",
         "props": {},
         "type": "node"
        }
       ],
       "instanceArgs": {
        "namespace": "html",
        "tag": "div"
       },
       "nodeType": "DOM",
       "props": {},
       "type": "node"
      },
      "text/html": [
       "<div\n",
       "    class=\"webio-mountpoint\"\n",
       "    data-webio-mountpoint=\"1416005558996662093\"\n",
       ">\n",
       "    <script>\n",
       "    (function(){\n",
       "    // Some integrations (namely, IJulia/Jupyter) use an alternate render pathway than\n",
       "    // just putting the html on the page. If WebIO isn't defined, then it's pretty likely\n",
       "    // that we're in one of those situations and the integration just isn't installed\n",
       "    // correctly.\n",
       "    if (typeof window.WebIO === \"undefined\") {\n",
       "        document\n",
       "            .querySelector('[data-webio-mountpoint=\"1416005558996662093\"]')\n",
       "            .innerHTML = (\n",
       "                '<div style=\"padding: 1em; background-color: #f8d6da; border: 1px solid #f5c6cb; font-weight: bold;\">' +\n",
       "                '<p><strong>WebIO not detected.</strong></p>' +\n",
       "                '<p>Please read ' +\n",
       "                '<a href=\"https://juliagizmos.github.io/WebIO.jl/latest/troubleshooting/not-detected/\" target=\"_blank\">the troubleshooting guide</a> ' +\n",
       "                'for more information on how to resolve this issue.</p>' +\n",
       "                '<p><a href=\"https://juliagizmos.github.io/WebIO.jl/latest/troubleshooting/not-detected/\" target=\"_blank\">https://juliagizmos.github.io/WebIO.jl/latest/troubleshooting/not-detected/</a></p>' +\n",
       "                '</div>'\n",
       "            );\n",
       "        return;\n",
       "    }\n",
       "    WebIO.mount(\n",
       "        document.querySelector('[data-webio-mountpoint=\"1416005558996662093\"]'),\n",
       "        {\"props\":{},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"field interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{},\"nodeType\":\"Scope\",\"type\":\"node\",\"instanceArgs\":{\"imports\":{\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"},{\"name\":null,\"type\":\"js\",\"url\":\"\\/assetserver\\/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css\"}],\"type\":\"async_block\"},\"id\":\"5432103940800811028\",\"handlers\":{\"changes\":[\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\"],\"index\":[\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\"]},\"systemjs_options\":null,\"mount_callbacks\":[\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"0.1\\\",\\\"0.2\\\",\\\"0.3\\\",\\\"0.4\\\",\\\"0.5\\\",\\\"0.6\\\",\\\"0.7\\\",\\\"0.8\\\",\\\"0.9\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"1.2\\\",\\\"1.3\\\",\\\"1.4\\\",\\\"1.5\\\",\\\"1.6\\\",\\\"1.7\\\",\\\"1.8\\\",\\\"1.9\\\",\\\"2.0\\\",\\\"2.1\\\",\\\"2.2\\\",\\\"2.3\\\",\\\"2.4\\\",\\\"2.5\\\",\\\"2.6\\\",\\\"2.7\\\",\\\"2.8\\\",\\\"2.9\\\",\\\"3.0\\\",\\\"3.1\\\",\\\"3.2\\\",\\\"3.3\\\",\\\"3.4\\\",\\\"3.5\\\",\\\"3.6\\\",\\\"3.7\\\",\\\"3.8\\\",\\\"3.9\\\",\\\"4.0\\\",\\\"4.1\\\",\\\"4.2\\\",\\\"4.3\\\",\\\"4.4\\\",\\\"4.5\\\",\\\"4.6\\\",\\\"4.7\\\",\\\"4.8\\\",\\\"4.9\\\",\\\"5.0\\\",\\\"5.1\\\",\\\"5.2\\\",\\\"5.3\\\",\\\"5.4\\\",\\\"5.5\\\",\\\"5.6\\\",\\\"5.7\\\",\\\"5.8\\\",\\\"5.9\\\",\\\"6.0\\\",\\\"6.1\\\",\\\"6.2\\\",\\\"6.3\\\",\\\"6.4\\\",\\\"6.5\\\",\\\"6.6\\\",\\\"6.7\\\",\\\"6.8\\\",\\\"6.9\\\",\\\"7.0\\\",\\\"7.1\\\",\\\"7.2\\\",\\\"7.3\\\",\\\"7.4\\\",\\\"7.5\\\",\\\"7.6\\\",\\\"7.7\\\",\\\"7.8\\\",\\\"7.9\\\",\\\"8.0\\\",\\\"8.1\\\",\\\"8.2\\\",\\\"8.3\\\",\\\"8.4\\\",\\\"8.5\\\",\\\"8.6\\\",\\\"8.7\\\",\\\"8.8\\\",\\\"8.9\\\",\\\"9.0\\\",\\\"9.1\\\",\\\"9.2\\\",\\\"9.3\\\",\\\"9.4\\\",\\\"9.5\\\",\\\"9.6\\\",\\\"9.7\\\",\\\"9.8\\\",\\\"9.9\\\",\\\"10.0\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"5432103940800811028\\\",\\\"id\\\":\\\"523688131832745273\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"5432103940800811028\\\",\\\"id\\\":\\\"1932163917185879796\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"5432103940800811028\\\",\\\"id\\\":\\\"523688131832745273\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"5432103940800811028\\\",\\\"id\\\":\\\"1932163917185879796\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\"],\"observables\":{\"changes\":{\"sync\":false,\"id\":\"523688131832745273\",\"value\":0},\"index\":{\"sync\":true,\"id\":\"1932163917185879796\",\"value\":50}}},\"children\":[{\"props\":{\"className\":\"interact-flex-row interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact-flex-row-left\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact \",\"style\":{\"padding\":\"5px 10px 0px 10px\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"label\"},\"children\":[\"Y₁\"]}]},{\"props\":{\"className\":\"interact-flex-row-center\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"max\":100,\"min\":1,\"attributes\":{\"type\":\"range\",\"data-bind\":\"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\",\"orient\":\"horizontal\"},\"step\":1,\"className\":\"slider slider is-fullwidth\",\"style\":{}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"input\"},\"children\":[]}]},{\"props\":{\"className\":\"interact-flex-row-right\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"attributes\":{\"data-bind\":\"text: formatted_val\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"p\"},\"children\":[]}]}]}]}]},{\"props\":{\"className\":\"field interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{},\"nodeType\":\"Scope\",\"type\":\"node\",\"instanceArgs\":{\"imports\":{\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"},{\"name\":null,\"type\":\"js\",\"url\":\"\\/assetserver\\/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css\"}],\"type\":\"async_block\"},\"id\":\"1718417666948007598\",\"handlers\":{\"changes\":[\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\"],\"index\":[\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\"]},\"systemjs_options\":null,\"mount_callbacks\":[\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"0.1\\\",\\\"0.2\\\",\\\"0.3\\\",\\\"0.4\\\",\\\"0.5\\\",\\\"0.6\\\",\\\"0.7\\\",\\\"0.8\\\",\\\"0.9\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"1.2\\\",\\\"1.3\\\",\\\"1.4\\\",\\\"1.5\\\",\\\"1.6\\\",\\\"1.7\\\",\\\"1.8\\\",\\\"1.9\\\",\\\"2.0\\\",\\\"2.1\\\",\\\"2.2\\\",\\\"2.3\\\",\\\"2.4\\\",\\\"2.5\\\",\\\"2.6\\\",\\\"2.7\\\",\\\"2.8\\\",\\\"2.9\\\",\\\"3.0\\\",\\\"3.1\\\",\\\"3.2\\\",\\\"3.3\\\",\\\"3.4\\\",\\\"3.5\\\",\\\"3.6\\\",\\\"3.7\\\",\\\"3.8\\\",\\\"3.9\\\",\\\"4.0\\\",\\\"4.1\\\",\\\"4.2\\\",\\\"4.3\\\",\\\"4.4\\\",\\\"4.5\\\",\\\"4.6\\\",\\\"4.7\\\",\\\"4.8\\\",\\\"4.9\\\",\\\"5.0\\\",\\\"5.1\\\",\\\"5.2\\\",\\\"5.3\\\",\\\"5.4\\\",\\\"5.5\\\",\\\"5.6\\\",\\\"5.7\\\",\\\"5.8\\\",\\\"5.9\\\",\\\"6.0\\\",\\\"6.1\\\",\\\"6.2\\\",\\\"6.3\\\",\\\"6.4\\\",\\\"6.5\\\",\\\"6.6\\\",\\\"6.7\\\",\\\"6.8\\\",\\\"6.9\\\",\\\"7.0\\\",\\\"7.1\\\",\\\"7.2\\\",\\\"7.3\\\",\\\"7.4\\\",\\\"7.5\\\",\\\"7.6\\\",\\\"7.7\\\",\\\"7.8\\\",\\\"7.9\\\",\\\"8.0\\\",\\\"8.1\\\",\\\"8.2\\\",\\\"8.3\\\",\\\"8.4\\\",\\\"8.5\\\",\\\"8.6\\\",\\\"8.7\\\",\\\"8.8\\\",\\\"8.9\\\",\\\"9.0\\\",\\\"9.1\\\",\\\"9.2\\\",\\\"9.3\\\",\\\"9.4\\\",\\\"9.5\\\",\\\"9.6\\\",\\\"9.7\\\",\\\"9.8\\\",\\\"9.9\\\",\\\"10.0\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"1718417666948007598\\\",\\\"id\\\":\\\"8725565259840982185\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"1718417666948007598\\\",\\\"id\\\":\\\"3511672556481969786\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"1718417666948007598\\\",\\\"id\\\":\\\"8725565259840982185\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"1718417666948007598\\\",\\\"id\\\":\\\"3511672556481969786\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\"],\"observables\":{\"changes\":{\"sync\":false,\"id\":\"8725565259840982185\",\"value\":0},\"index\":{\"sync\":true,\"id\":\"3511672556481969786\",\"value\":50}}},\"children\":[{\"props\":{\"className\":\"interact-flex-row interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact-flex-row-left\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact \",\"style\":{\"padding\":\"5px 10px 0px 10px\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"label\"},\"children\":[\"Y₂\"]}]},{\"props\":{\"className\":\"interact-flex-row-center\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"max\":100,\"min\":1,\"attributes\":{\"type\":\"range\",\"data-bind\":\"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\",\"orient\":\"horizontal\"},\"step\":1,\"className\":\"slider slider is-fullwidth\",\"style\":{}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"input\"},\"children\":[]}]},{\"props\":{\"className\":\"interact-flex-row-right\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"attributes\":{\"data-bind\":\"text: formatted_val\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"p\"},\"children\":[]}]}]}]}]},{\"props\":{\"className\":\"field interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{},\"nodeType\":\"Scope\",\"type\":\"node\",\"instanceArgs\":{\"imports\":{\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"},{\"name\":null,\"type\":\"js\",\"url\":\"\\/assetserver\\/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css\"}],\"type\":\"async_block\"},\"id\":\"15970815832708533116\",\"handlers\":{\"changes\":[\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\"],\"index\":[\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\"]},\"systemjs_options\":null,\"mount_callbacks\":[\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"0.1\\\",\\\"0.2\\\",\\\"0.3\\\",\\\"0.4\\\",\\\"0.5\\\",\\\"0.6\\\",\\\"0.7\\\",\\\"0.8\\\",\\\"0.9\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"1.2\\\",\\\"1.3\\\",\\\"1.4\\\",\\\"1.5\\\",\\\"1.6\\\",\\\"1.7\\\",\\\"1.8\\\",\\\"1.9\\\",\\\"2.0\\\",\\\"2.1\\\",\\\"2.2\\\",\\\"2.3\\\",\\\"2.4\\\",\\\"2.5\\\",\\\"2.6\\\",\\\"2.7\\\",\\\"2.8\\\",\\\"2.9\\\",\\\"3.0\\\",\\\"3.1\\\",\\\"3.2\\\",\\\"3.3\\\",\\\"3.4\\\",\\\"3.5\\\",\\\"3.6\\\",\\\"3.7\\\",\\\"3.8\\\",\\\"3.9\\\",\\\"4.0\\\",\\\"4.1\\\",\\\"4.2\\\",\\\"4.3\\\",\\\"4.4\\\",\\\"4.5\\\",\\\"4.6\\\",\\\"4.7\\\",\\\"4.8\\\",\\\"4.9\\\",\\\"5.0\\\",\\\"5.1\\\",\\\"5.2\\\",\\\"5.3\\\",\\\"5.4\\\",\\\"5.5\\\",\\\"5.6\\\",\\\"5.7\\\",\\\"5.8\\\",\\\"5.9\\\",\\\"6.0\\\",\\\"6.1\\\",\\\"6.2\\\",\\\"6.3\\\",\\\"6.4\\\",\\\"6.5\\\",\\\"6.6\\\",\\\"6.7\\\",\\\"6.8\\\",\\\"6.9\\\",\\\"7.0\\\",\\\"7.1\\\",\\\"7.2\\\",\\\"7.3\\\",\\\"7.4\\\",\\\"7.5\\\",\\\"7.6\\\",\\\"7.7\\\",\\\"7.8\\\",\\\"7.9\\\",\\\"8.0\\\",\\\"8.1\\\",\\\"8.2\\\",\\\"8.3\\\",\\\"8.4\\\",\\\"8.5\\\",\\\"8.6\\\",\\\"8.7\\\",\\\"8.8\\\",\\\"8.9\\\",\\\"9.0\\\",\\\"9.1\\\",\\\"9.2\\\",\\\"9.3\\\",\\\"9.4\\\",\\\"9.5\\\",\\\"9.6\\\",\\\"9.7\\\",\\\"9.8\\\",\\\"9.9\\\",\\\"10.0\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"15970815832708533116\\\",\\\"id\\\":\\\"2420044375029248402\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"15970815832708533116\\\",\\\"id\\\":\\\"554882307497398093\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"15970815832708533116\\\",\\\"id\\\":\\\"2420044375029248402\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"15970815832708533116\\\",\\\"id\\\":\\\"554882307497398093\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\"],\"observables\":{\"changes\":{\"sync\":false,\"id\":\"2420044375029248402\",\"value\":0},\"index\":{\"sync\":true,\"id\":\"554882307497398093\",\"value\":50}}},\"children\":[{\"props\":{\"className\":\"interact-flex-row interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact-flex-row-left\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact \",\"style\":{\"padding\":\"5px 10px 0px 10px\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"label\"},\"children\":[\"Y₃\"]}]},{\"props\":{\"className\":\"interact-flex-row-center\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"max\":100,\"min\":1,\"attributes\":{\"type\":\"range\",\"data-bind\":\"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\",\"orient\":\"horizontal\"},\"step\":1,\"className\":\"slider slider is-fullwidth\",\"style\":{}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"input\"},\"children\":[]}]},{\"props\":{\"className\":\"interact-flex-row-right\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"attributes\":{\"data-bind\":\"text: formatted_val\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"p\"},\"children\":[]}]}]}]}]},{\"props\":{\"className\":\"field interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{},\"nodeType\":\"Scope\",\"type\":\"node\",\"instanceArgs\":{\"imports\":{\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"},{\"name\":null,\"type\":\"js\",\"url\":\"\\/assetserver\\/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css\"}],\"type\":\"async_block\"},\"id\":\"3780806694388362671\",\"handlers\":{\"changes\":[\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\"],\"index\":[\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\"]},\"systemjs_options\":null,\"mount_callbacks\":[\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"0.1\\\",\\\"0.2\\\",\\\"0.3\\\",\\\"0.4\\\",\\\"0.5\\\",\\\"0.6\\\",\\\"0.7\\\",\\\"0.8\\\",\\\"0.9\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"1.2\\\",\\\"1.3\\\",\\\"1.4\\\",\\\"1.5\\\",\\\"1.6\\\",\\\"1.7\\\",\\\"1.8\\\",\\\"1.9\\\",\\\"2.0\\\",\\\"2.1\\\",\\\"2.2\\\",\\\"2.3\\\",\\\"2.4\\\",\\\"2.5\\\",\\\"2.6\\\",\\\"2.7\\\",\\\"2.8\\\",\\\"2.9\\\",\\\"3.0\\\",\\\"3.1\\\",\\\"3.2\\\",\\\"3.3\\\",\\\"3.4\\\",\\\"3.5\\\",\\\"3.6\\\",\\\"3.7\\\",\\\"3.8\\\",\\\"3.9\\\",\\\"4.0\\\",\\\"4.1\\\",\\\"4.2\\\",\\\"4.3\\\",\\\"4.4\\\",\\\"4.5\\\",\\\"4.6\\\",\\\"4.7\\\",\\\"4.8\\\",\\\"4.9\\\",\\\"5.0\\\",\\\"5.1\\\",\\\"5.2\\\",\\\"5.3\\\",\\\"5.4\\\",\\\"5.5\\\",\\\"5.6\\\",\\\"5.7\\\",\\\"5.8\\\",\\\"5.9\\\",\\\"6.0\\\",\\\"6.1\\\",\\\"6.2\\\",\\\"6.3\\\",\\\"6.4\\\",\\\"6.5\\\",\\\"6.6\\\",\\\"6.7\\\",\\\"6.8\\\",\\\"6.9\\\",\\\"7.0\\\",\\\"7.1\\\",\\\"7.2\\\",\\\"7.3\\\",\\\"7.4\\\",\\\"7.5\\\",\\\"7.6\\\",\\\"7.7\\\",\\\"7.8\\\",\\\"7.9\\\",\\\"8.0\\\",\\\"8.1\\\",\\\"8.2\\\",\\\"8.3\\\",\\\"8.4\\\",\\\"8.5\\\",\\\"8.6\\\",\\\"8.7\\\",\\\"8.8\\\",\\\"8.9\\\",\\\"9.0\\\",\\\"9.1\\\",\\\"9.2\\\",\\\"9.3\\\",\\\"9.4\\\",\\\"9.5\\\",\\\"9.6\\\",\\\"9.7\\\",\\\"9.8\\\",\\\"9.9\\\",\\\"10.0\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"3780806694388362671\\\",\\\"id\\\":\\\"16800950861448885590\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"3780806694388362671\\\",\\\"id\\\":\\\"636691891107015737\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"3780806694388362671\\\",\\\"id\\\":\\\"16800950861448885590\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"3780806694388362671\\\",\\\"id\\\":\\\"636691891107015737\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\"],\"observables\":{\"changes\":{\"sync\":false,\"id\":\"16800950861448885590\",\"value\":0},\"index\":{\"sync\":true,\"id\":\"636691891107015737\",\"value\":50}}},\"children\":[{\"props\":{\"className\":\"interact-flex-row interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact-flex-row-left\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact \",\"style\":{\"padding\":\"5px 10px 0px 10px\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"label\"},\"children\":[\"Y₄\"]}]},{\"props\":{\"className\":\"interact-flex-row-center\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"max\":100,\"min\":1,\"attributes\":{\"type\":\"range\",\"data-bind\":\"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\",\"orient\":\"horizontal\"},\"step\":1,\"className\":\"slider slider is-fullwidth\",\"style\":{}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"input\"},\"children\":[]}]},{\"props\":{\"className\":\"interact-flex-row-right\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"attributes\":{\"data-bind\":\"text: formatted_val\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"p\"},\"children\":[]}]}]}]}]},{\"props\":{\"className\":\"field interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{},\"nodeType\":\"Scope\",\"type\":\"node\",\"instanceArgs\":{\"imports\":{\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"},{\"name\":null,\"type\":\"js\",\"url\":\"\\/assetserver\\/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css\"}],\"type\":\"async_block\"},\"id\":\"6128907041811942585\",\"handlers\":{\"changes\":[\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\"],\"index\":[\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\"]},\"systemjs_options\":null,\"mount_callbacks\":[\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"0.1\\\",\\\"0.2\\\",\\\"0.3\\\",\\\"0.4\\\",\\\"0.5\\\",\\\"0.6\\\",\\\"0.7\\\",\\\"0.8\\\",\\\"0.9\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"1.2\\\",\\\"1.3\\\",\\\"1.4\\\",\\\"1.5\\\",\\\"1.6\\\",\\\"1.7\\\",\\\"1.8\\\",\\\"1.9\\\",\\\"2.0\\\",\\\"2.1\\\",\\\"2.2\\\",\\\"2.3\\\",\\\"2.4\\\",\\\"2.5\\\",\\\"2.6\\\",\\\"2.7\\\",\\\"2.8\\\",\\\"2.9\\\",\\\"3.0\\\",\\\"3.1\\\",\\\"3.2\\\",\\\"3.3\\\",\\\"3.4\\\",\\\"3.5\\\",\\\"3.6\\\",\\\"3.7\\\",\\\"3.8\\\",\\\"3.9\\\",\\\"4.0\\\",\\\"4.1\\\",\\\"4.2\\\",\\\"4.3\\\",\\\"4.4\\\",\\\"4.5\\\",\\\"4.6\\\",\\\"4.7\\\",\\\"4.8\\\",\\\"4.9\\\",\\\"5.0\\\",\\\"5.1\\\",\\\"5.2\\\",\\\"5.3\\\",\\\"5.4\\\",\\\"5.5\\\",\\\"5.6\\\",\\\"5.7\\\",\\\"5.8\\\",\\\"5.9\\\",\\\"6.0\\\",\\\"6.1\\\",\\\"6.2\\\",\\\"6.3\\\",\\\"6.4\\\",\\\"6.5\\\",\\\"6.6\\\",\\\"6.7\\\",\\\"6.8\\\",\\\"6.9\\\",\\\"7.0\\\",\\\"7.1\\\",\\\"7.2\\\",\\\"7.3\\\",\\\"7.4\\\",\\\"7.5\\\",\\\"7.6\\\",\\\"7.7\\\",\\\"7.8\\\",\\\"7.9\\\",\\\"8.0\\\",\\\"8.1\\\",\\\"8.2\\\",\\\"8.3\\\",\\\"8.4\\\",\\\"8.5\\\",\\\"8.6\\\",\\\"8.7\\\",\\\"8.8\\\",\\\"8.9\\\",\\\"9.0\\\",\\\"9.1\\\",\\\"9.2\\\",\\\"9.3\\\",\\\"9.4\\\",\\\"9.5\\\",\\\"9.6\\\",\\\"9.7\\\",\\\"9.8\\\",\\\"9.9\\\",\\\"10.0\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"6128907041811942585\\\",\\\"id\\\":\\\"15585748669024378077\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"6128907041811942585\\\",\\\"id\\\":\\\"16496876739494999155\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"6128907041811942585\\\",\\\"id\\\":\\\"15585748669024378077\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"6128907041811942585\\\",\\\"id\\\":\\\"16496876739494999155\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\"],\"observables\":{\"changes\":{\"sync\":false,\"id\":\"15585748669024378077\",\"value\":0},\"index\":{\"sync\":true,\"id\":\"16496876739494999155\",\"value\":50}}},\"children\":[{\"props\":{\"className\":\"interact-flex-row interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact-flex-row-left\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact \",\"style\":{\"padding\":\"5px 10px 0px 10px\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"label\"},\"children\":[\"Y₅\"]}]},{\"props\":{\"className\":\"interact-flex-row-center\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"max\":100,\"min\":1,\"attributes\":{\"type\":\"range\",\"data-bind\":\"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\",\"orient\":\"horizontal\"},\"step\":1,\"className\":\"slider slider is-fullwidth\",\"style\":{}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"input\"},\"children\":[]}]},{\"props\":{\"className\":\"interact-flex-row-right\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"attributes\":{\"data-bind\":\"text: formatted_val\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"p\"},\"children\":[]}]}]}]}]},{\"props\":{\"className\":\"field interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{},\"nodeType\":\"Scope\",\"type\":\"node\",\"instanceArgs\":{\"imports\":{\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"},{\"name\":null,\"type\":\"js\",\"url\":\"\\/assetserver\\/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css\"}],\"type\":\"async_block\"},\"id\":\"7909771970869587988\",\"handlers\":{\"changes\":[\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\"],\"index\":[\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\"]},\"systemjs_options\":null,\"mount_callbacks\":[\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"0.1\\\",\\\"0.2\\\",\\\"0.3\\\",\\\"0.4\\\",\\\"0.5\\\",\\\"0.6\\\",\\\"0.7\\\",\\\"0.8\\\",\\\"0.9\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"1.2\\\",\\\"1.3\\\",\\\"1.4\\\",\\\"1.5\\\",\\\"1.6\\\",\\\"1.7\\\",\\\"1.8\\\",\\\"1.9\\\",\\\"2.0\\\",\\\"2.1\\\",\\\"2.2\\\",\\\"2.3\\\",\\\"2.4\\\",\\\"2.5\\\",\\\"2.6\\\",\\\"2.7\\\",\\\"2.8\\\",\\\"2.9\\\",\\\"3.0\\\",\\\"3.1\\\",\\\"3.2\\\",\\\"3.3\\\",\\\"3.4\\\",\\\"3.5\\\",\\\"3.6\\\",\\\"3.7\\\",\\\"3.8\\\",\\\"3.9\\\",\\\"4.0\\\",\\\"4.1\\\",\\\"4.2\\\",\\\"4.3\\\",\\\"4.4\\\",\\\"4.5\\\",\\\"4.6\\\",\\\"4.7\\\",\\\"4.8\\\",\\\"4.9\\\",\\\"5.0\\\",\\\"5.1\\\",\\\"5.2\\\",\\\"5.3\\\",\\\"5.4\\\",\\\"5.5\\\",\\\"5.6\\\",\\\"5.7\\\",\\\"5.8\\\",\\\"5.9\\\",\\\"6.0\\\",\\\"6.1\\\",\\\"6.2\\\",\\\"6.3\\\",\\\"6.4\\\",\\\"6.5\\\",\\\"6.6\\\",\\\"6.7\\\",\\\"6.8\\\",\\\"6.9\\\",\\\"7.0\\\",\\\"7.1\\\",\\\"7.2\\\",\\\"7.3\\\",\\\"7.4\\\",\\\"7.5\\\",\\\"7.6\\\",\\\"7.7\\\",\\\"7.8\\\",\\\"7.9\\\",\\\"8.0\\\",\\\"8.1\\\",\\\"8.2\\\",\\\"8.3\\\",\\\"8.4\\\",\\\"8.5\\\",\\\"8.6\\\",\\\"8.7\\\",\\\"8.8\\\",\\\"8.9\\\",\\\"9.0\\\",\\\"9.1\\\",\\\"9.2\\\",\\\"9.3\\\",\\\"9.4\\\",\\\"9.5\\\",\\\"9.6\\\",\\\"9.7\\\",\\\"9.8\\\",\\\"9.9\\\",\\\"10.0\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"7909771970869587988\\\",\\\"id\\\":\\\"16774039972888896363\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"7909771970869587988\\\",\\\"id\\\":\\\"9956793018930867036\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"7909771970869587988\\\",\\\"id\\\":\\\"16774039972888896363\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"7909771970869587988\\\",\\\"id\\\":\\\"9956793018930867036\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\"],\"observables\":{\"changes\":{\"sync\":false,\"id\":\"16774039972888896363\",\"value\":0},\"index\":{\"sync\":true,\"id\":\"9956793018930867036\",\"value\":50}}},\"children\":[{\"props\":{\"className\":\"interact-flex-row interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact-flex-row-left\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact \",\"style\":{\"padding\":\"5px 10px 0px 10px\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"label\"},\"children\":[\"Y₆\"]}]},{\"props\":{\"className\":\"interact-flex-row-center\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"max\":100,\"min\":1,\"attributes\":{\"type\":\"range\",\"data-bind\":\"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\",\"orient\":\"horizontal\"},\"step\":1,\"className\":\"slider slider is-fullwidth\",\"style\":{}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"input\"},\"children\":[]}]},{\"props\":{\"className\":\"interact-flex-row-right\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"attributes\":{\"data-bind\":\"text: formatted_val\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"p\"},\"children\":[]}]}]}]}]},{\"props\":{\"className\":\"field interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{},\"nodeType\":\"Scope\",\"type\":\"node\",\"instanceArgs\":{\"imports\":{\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"},{\"name\":null,\"type\":\"js\",\"url\":\"\\/assetserver\\/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css\"}],\"type\":\"async_block\"},\"id\":\"8740962986163213682\",\"handlers\":{\"changes\":[\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\"],\"index\":[\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\"]},\"systemjs_options\":null,\"mount_callbacks\":[\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"0.1\\\",\\\"0.2\\\",\\\"0.3\\\",\\\"0.4\\\",\\\"0.5\\\",\\\"0.6\\\",\\\"0.7\\\",\\\"0.8\\\",\\\"0.9\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"1.2\\\",\\\"1.3\\\",\\\"1.4\\\",\\\"1.5\\\",\\\"1.6\\\",\\\"1.7\\\",\\\"1.8\\\",\\\"1.9\\\",\\\"2.0\\\",\\\"2.1\\\",\\\"2.2\\\",\\\"2.3\\\",\\\"2.4\\\",\\\"2.5\\\",\\\"2.6\\\",\\\"2.7\\\",\\\"2.8\\\",\\\"2.9\\\",\\\"3.0\\\",\\\"3.1\\\",\\\"3.2\\\",\\\"3.3\\\",\\\"3.4\\\",\\\"3.5\\\",\\\"3.6\\\",\\\"3.7\\\",\\\"3.8\\\",\\\"3.9\\\",\\\"4.0\\\",\\\"4.1\\\",\\\"4.2\\\",\\\"4.3\\\",\\\"4.4\\\",\\\"4.5\\\",\\\"4.6\\\",\\\"4.7\\\",\\\"4.8\\\",\\\"4.9\\\",\\\"5.0\\\",\\\"5.1\\\",\\\"5.2\\\",\\\"5.3\\\",\\\"5.4\\\",\\\"5.5\\\",\\\"5.6\\\",\\\"5.7\\\",\\\"5.8\\\",\\\"5.9\\\",\\\"6.0\\\",\\\"6.1\\\",\\\"6.2\\\",\\\"6.3\\\",\\\"6.4\\\",\\\"6.5\\\",\\\"6.6\\\",\\\"6.7\\\",\\\"6.8\\\",\\\"6.9\\\",\\\"7.0\\\",\\\"7.1\\\",\\\"7.2\\\",\\\"7.3\\\",\\\"7.4\\\",\\\"7.5\\\",\\\"7.6\\\",\\\"7.7\\\",\\\"7.8\\\",\\\"7.9\\\",\\\"8.0\\\",\\\"8.1\\\",\\\"8.2\\\",\\\"8.3\\\",\\\"8.4\\\",\\\"8.5\\\",\\\"8.6\\\",\\\"8.7\\\",\\\"8.8\\\",\\\"8.9\\\",\\\"9.0\\\",\\\"9.1\\\",\\\"9.2\\\",\\\"9.3\\\",\\\"9.4\\\",\\\"9.5\\\",\\\"9.6\\\",\\\"9.7\\\",\\\"9.8\\\",\\\"9.9\\\",\\\"10.0\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"8740962986163213682\\\",\\\"id\\\":\\\"10158758216819727422\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"8740962986163213682\\\",\\\"id\\\":\\\"16039901869771518637\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"8740962986163213682\\\",\\\"id\\\":\\\"10158758216819727422\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"8740962986163213682\\\",\\\"id\\\":\\\"16039901869771518637\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\"],\"observables\":{\"changes\":{\"sync\":false,\"id\":\"10158758216819727422\",\"value\":0},\"index\":{\"sync\":true,\"id\":\"16039901869771518637\",\"value\":50}}},\"children\":[{\"props\":{\"className\":\"interact-flex-row interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact-flex-row-left\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact \",\"style\":{\"padding\":\"5px 10px 0px 10px\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"label\"},\"children\":[\"Y₇\"]}]},{\"props\":{\"className\":\"interact-flex-row-center\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"max\":100,\"min\":1,\"attributes\":{\"type\":\"range\",\"data-bind\":\"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\",\"orient\":\"horizontal\"},\"step\":1,\"className\":\"slider slider is-fullwidth\",\"style\":{}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"input\"},\"children\":[]}]},{\"props\":{\"className\":\"interact-flex-row-right\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"attributes\":{\"data-bind\":\"text: formatted_val\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"p\"},\"children\":[]}]}]}]}]},{\"props\":{\"className\":\"field interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{},\"nodeType\":\"Scope\",\"type\":\"node\",\"instanceArgs\":{\"imports\":{\"data\":[{\"name\":\"knockout\",\"type\":\"js\",\"url\":\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\"},{\"name\":\"knockout_punches\",\"type\":\"js\",\"url\":\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\"},{\"name\":null,\"type\":\"js\",\"url\":\"\\/assetserver\\/dc651e248070c73d6a4eaa2766193d4a09a13f05-all.js\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/0318b018d0ff756043bf1ee25f56ab5c74ef7889-style.css\"},{\"name\":null,\"type\":\"css\",\"url\":\"\\/assetserver\\/f798281fed8908611ae453136bda5c1a2e6bffd7-bulma_confined.min.css\"}],\"type\":\"async_block\"},\"id\":\"4003882290061871992\",\"handlers\":{\"changes\":[\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\"],\"index\":[\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\"]},\"systemjs_options\":null,\"mount_callbacks\":[\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"0.1\\\",\\\"0.2\\\",\\\"0.3\\\",\\\"0.4\\\",\\\"0.5\\\",\\\"0.6\\\",\\\"0.7\\\",\\\"0.8\\\",\\\"0.9\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"1.2\\\",\\\"1.3\\\",\\\"1.4\\\",\\\"1.5\\\",\\\"1.6\\\",\\\"1.7\\\",\\\"1.8\\\",\\\"1.9\\\",\\\"2.0\\\",\\\"2.1\\\",\\\"2.2\\\",\\\"2.3\\\",\\\"2.4\\\",\\\"2.5\\\",\\\"2.6\\\",\\\"2.7\\\",\\\"2.8\\\",\\\"2.9\\\",\\\"3.0\\\",\\\"3.1\\\",\\\"3.2\\\",\\\"3.3\\\",\\\"3.4\\\",\\\"3.5\\\",\\\"3.6\\\",\\\"3.7\\\",\\\"3.8\\\",\\\"3.9\\\",\\\"4.0\\\",\\\"4.1\\\",\\\"4.2\\\",\\\"4.3\\\",\\\"4.4\\\",\\\"4.5\\\",\\\"4.6\\\",\\\"4.7\\\",\\\"4.8\\\",\\\"4.9\\\",\\\"5.0\\\",\\\"5.1\\\",\\\"5.2\\\",\\\"5.3\\\",\\\"5.4\\\",\\\"5.5\\\",\\\"5.6\\\",\\\"5.7\\\",\\\"5.8\\\",\\\"5.9\\\",\\\"6.0\\\",\\\"6.1\\\",\\\"6.2\\\",\\\"6.3\\\",\\\"6.4\\\",\\\"6.5\\\",\\\"6.6\\\",\\\"6.7\\\",\\\"6.8\\\",\\\"6.9\\\",\\\"7.0\\\",\\\"7.1\\\",\\\"7.2\\\",\\\"7.3\\\",\\\"7.4\\\",\\\"7.5\\\",\\\"7.6\\\",\\\"7.7\\\",\\\"7.8\\\",\\\"7.9\\\",\\\"8.0\\\",\\\"8.1\\\",\\\"8.2\\\",\\\"8.3\\\",\\\"8.4\\\",\\\"8.5\\\",\\\"8.6\\\",\\\"8.7\\\",\\\"8.8\\\",\\\"8.9\\\",\\\"9.0\\\",\\\"9.1\\\",\\\"9.2\\\",\\\"9.3\\\",\\\"9.4\\\",\\\"9.5\\\",\\\"9.6\\\",\\\"9.7\\\",\\\"9.8\\\",\\\"9.9\\\",\\\"10.0\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"4003882290061871992\\\",\\\"id\\\":\\\"11487652428459938951\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"4003882290061871992\\\",\\\"id\\\":\\\"10134177006576795128\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"4003882290061871992\\\",\\\"id\\\":\\\"11487652428459938951\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"4003882290061871992\\\",\\\"id\\\":\\\"10134177006576795128\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"\\/assetserver\\/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\"],\"observables\":{\"changes\":{\"sync\":false,\"id\":\"11487652428459938951\",\"value\":0},\"index\":{\"sync\":true,\"id\":\"10134177006576795128\",\"value\":50}}},\"children\":[{\"props\":{\"className\":\"interact-flex-row interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact-flex-row-left\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"className\":\"interact \",\"style\":{\"padding\":\"5px 10px 0px 10px\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"label\"},\"children\":[\"Y₈\"]}]},{\"props\":{\"className\":\"interact-flex-row-center\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"max\":100,\"min\":1,\"attributes\":{\"type\":\"range\",\"data-bind\":\"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\",\"orient\":\"horizontal\"},\"step\":1,\"className\":\"slider slider is-fullwidth\",\"style\":{}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"input\"},\"children\":[]}]},{\"props\":{\"className\":\"interact-flex-row-right\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"attributes\":{\"data-bind\":\"text: formatted_val\"}},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"p\"},\"children\":[]}]}]}]}]},{\"props\":{},\"nodeType\":\"Scope\",\"type\":\"node\",\"instanceArgs\":{\"imports\":{\"data\":[],\"type\":\"async_block\"},\"id\":\"6541735593694256628\",\"handlers\":{},\"systemjs_options\":null,\"mount_callbacks\":[],\"observables\":{\"obs-node\":{\"sync\":false,\"id\":\"3383768342523454074\",\"value\":{\"props\":{\"className\":\"interact-flex-row interact-widget\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[{\"props\":{\"setInnerHtml\":\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n<svg xmlns=\\\"http:\\/\\/www.w3.org\\/2000\\/svg\\\"\\n     xmlns:xlink=\\\"http:\\/\\/www.w3.org\\/1999\\/xlink\\\"\\n     version=\\\"1.2\\\"\\n     width=\\\"141.42mm\\\" height=\\\"100mm\\\" viewBox=\\\"0 0 141.42 100\\\"\\n     stroke=\\\"none\\\"\\n     fill=\\\"#000000\\\"\\n     stroke-width=\\\"0.3\\\"\\n     font-size=\\\"3.88\\\"\\n>\\n<defs>\\n  <marker id=\\\"arrow\\\" markerWidth=\\\"15\\\" markerHeight=\\\"7\\\" refX=\\\"5\\\" refY=\\\"3.5\\\" orient=\\\"auto\\\" markerUnits=\\\"strokeWidth\\\">\\n    <path d=\\\"M0,0 L15,3.5 L0,7 z\\\" stroke=\\\"context-stroke\\\" fill=\\\"context-stroke\\\"\\/>\\n  <\\/marker>\\n<\\/defs>\\n<g stroke-width=\\\"1.22\\\" fill=\\\"#000000\\\" fill-opacity=\\\"0.000\\\" id=\\\"img-0aef6dee-1\\\">\\n  <g transform=\\\"translate(101.62,69.71)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M22.98,-10.57 L-22.98,10.57 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(106.66,40.76)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-18.7,-13.08 L18.7,13.08 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(58.22,37.58)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M20.58,-10.42 L-20.58,10.42 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(55.5,16.51)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-22.63,-6.56 L22.63,6.56 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(42.69,87.13)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M25.02,-3.67 L-25.02,3.67 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(53.18,66.53)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M16.4,12.9 L-16.4,-12.9 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(22.27,71.07)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-8.45,16.59 L8.45,-16.59 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(30.03,29.41)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M2.18,16.84 L-2.18,-16.84 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n<\\/g>\\n<g stroke-width=\\\"1.22\\\" id=\\\"img-0aef6dee-2\\\">\\n  <g transform=\\\"translate(81.74,78.85)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M2.65,0.48 L-3.09,1.42 0.45,-1.91 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(122.74,52)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M0.1,-1.93 L2.62,1.84 -2.73,0.1 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(40.64,46.48)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M2.67,0.4 L-3,1.52 0.33,-1.92 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(74.71,22.08)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-0.94,-1.81 L3.42,0.99 -2.47,0.82 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(21.29,90.27)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M2.22,1.13 L-3.61,0.53 1.4,-1.66 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(39.24,55.58)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-0.26,1.92 L-2.47,-1.94 2.73,0.02 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(29.46,56.93)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-2.52,0.75 L1.25,-2.46 1.27,1.71 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(28.19,15.17)\\\" stroke=\\\"#D3D3D3\\\">\\n    <path fill=\\\"none\\\" d=\\\"M-1.84,1.43 L-0.34,-2.6 2.18,1.17 \\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n<\\/g>\\n<g font-size=\\\"4\\\" stroke=\\\"#000000\\\" stroke-opacity=\\\"0.000\\\" fill=\\\"#000000\\\" id=\\\"img-0aef6dee-3\\\">\\n  <g transform=\\\"translate(87.61,76.15)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">i₁ = -0.3<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(118.15,48.79)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">i₂ = 0.7<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(45.49,44.03)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">i₃ = 0.2<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(69.59,20.6)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">i₄ = -0.1<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(27.24,89.4)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">i₅ = -0.1<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(42.96,58.51)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">i₆ = -0.2<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(27.51,60.77)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">i₇ = -0.1<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(28.66,18.87)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">i₈ = -0.1<\\/text>\\n    <\\/g>\\n  <\\/g>\\n<\\/g>\\n<g stroke-width=\\\"0\\\" stroke=\\\"#000000\\\" stroke-opacity=\\\"0.000\\\" id=\\\"img-0aef6dee-4\\\">\\n  <g transform=\\\"translate(129.64,56.82)\\\" fill=\\\"#FF0000\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"5.77\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(83.69,24.69)\\\" fill=\\\"#FF0000\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"5.77\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(27.3,8.33)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"5.77\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(73.6,82.59)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"5.77\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(11.79,91.67)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"5.77\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n  <g transform=\\\"translate(32.75,50.48)\\\" fill=\\\"#808080\\\">\\n    <circle cx=\\\"0\\\" cy=\\\"0\\\" r=\\\"5.77\\\" class=\\\"primitive\\\"\\/>\\n  <\\/g>\\n<\\/g>\\n<g font-size=\\\"4\\\" stroke=\\\"#000000\\\" stroke-opacity=\\\"0.000\\\" fill=\\\"#000000\\\" id=\\\"img-0aef6dee-5\\\">\\n  <g transform=\\\"translate(129.64,56.82)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">1<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(83.69,24.69)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">2<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(27.3,8.33)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">3<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(73.6,82.59)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">4<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(11.79,91.67)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">5<\\/text>\\n    <\\/g>\\n  <\\/g>\\n  <g transform=\\\"translate(32.75,50.48)\\\">\\n    <g class=\\\"primitive\\\">\\n      <text text-anchor=\\\"middle\\\" dy=\\\"0.35em\\\">6<\\/text>\\n    <\\/g>\\n  <\\/g>\\n<\\/g>\\n<\\/svg>\\n\"},\"nodeType\":\"DOM\",\"type\":\"node\",\"instanceArgs\":{\"namespace\":\"html\",\"tag\":\"div\"},\"children\":[]}]}}}},\"children\":[{\"props\":{},\"nodeType\":\"ObservableNode\",\"type\":\"node\",\"instanceArgs\":{\"id\":\"3383768342523454074\",\"name\":\"obs-node\"},\"children\":[]}]}]},\n",
       "        window,\n",
       "    );\n",
       "    })()\n",
       "    </script>\n",
       "</div>\n"
      ],
      "text/plain": [
       "Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Scope(Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[\"Y₁\"], Dict{Symbol, Any}(:className => \"interact \", :style => Dict{Any, Any}(:padding => \"5px 10px 0px 10px\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-left\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol, Any}(:max => 100, :min => 1, :attributes => Dict{Any, Any}(:type => \"range\", Symbol(\"data-bind\") => \"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\", \"orient\" => \"horizontal\"), :step => 1, :className => \"slider slider is-fullwidth\", :style => Dict{Any, Any}()))], Dict{Symbol, Any}(:className => \"interact-flex-row-center\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol, Any}(:attributes => Dict(\"data-bind\" => \"text: formatted_val\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-right\"))], Dict{Symbol, Any}(:className => \"interact-flex-row interact-widget\")), Dict{String, Tuple{AbstractObservable, Union{Nothing, Bool}}}(\"changes\" => (Observable(0), nothing), \"index\" => (Observable{Any}(50), nothing)), Set{String}(), nothing, Asset[Asset(\"js\", \"knockout\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout.js\"), Asset(\"js\", \"knockout_punches\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout_punches.js\"), Asset(\"js\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/all.js\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/style.css\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/Interact/PENUy/src/../assets/bulma_confined.min.css\")], Dict{Any, Any}(\"changes\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")], \"index\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\")]), WebIO.ConnectionPool(Channel{Any}(32), Set{AbstractConnection}(), Condition(Base.InvasiveLinkedList{Task}(Task (runnable) @0x0000000283a659f0, Task (runnable) @0x0000000283a659f0), Base.AlwaysLockedST(1))), WebIO.JSString[WebIO.JSString(\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"0.1\\\",\\\"0.2\\\",\\\"0.3\\\",\\\"0.4\\\",\\\"0.5\\\",\\\"0.6\\\",\\\"0.7\\\",\\\"0.8\\\",\\\"0.9\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"1.2\\\",\\\"1.3\\\",\\\"1.4\\\",\\\"1.5\\\",\\\"1.6\\\",\\\"1.7\\\",\\\"1.8\\\",\\\"1.9\\\",\\\"2.0\\\",\\\"2.1\\\",\\\"2.2\\\",\\\"2.3\\\",\\\"2.4\\\",\\\"2.5\\\",\\\"2.6\\\",\\\"2.7\\\",\\\"2.8\\\",\\\"2.9\\\",\\\"3.0\\\",\\\"3.1\\\",\\\"3.2\\\",\\\"3.3\\\",\\\"3.4\\\",\\\"3.5\\\",\\\"3.6\\\",\\\"3.7\\\",\\\"3.8\\\",\\\"3.9\\\",\\\"4.0\\\",\\\"4.1\\\",\\\"4.2\\\",\\\"4.3\\\",\\\"4.4\\\",\\\"4.5\\\",\\\"4.6\\\",\\\"4.7\\\",\\\"4.8\\\",\\\"4.9\\\",\\\"5.0\\\",\\\"5.1\\\",\\\"5.2\\\",\\\"5.3\\\",\\\"5.4\\\",\\\"5.5\\\",\\\"5.6\\\",\\\"5.7\\\",\\\"5.8\\\",\\\"5.9\\\",\\\"6.0\\\",\\\"6.1\\\",\\\"6.2\\\",\\\"6.3\\\",\\\"6.4\\\",\\\"6.5\\\",\\\"6.6\\\",\\\"6.7\\\",\\\"6.8\\\",\\\"6.9\\\",\\\"7.0\\\",\\\"7.1\\\",\\\"7.2\\\",\\\"7.3\\\",\\\"7.4\\\",\\\"7.5\\\",\\\"7.6\\\",\\\"7.7\\\",\\\"7.8\\\",\\\"7.9\\\",\\\"8.0\\\",\\\"8.1\\\",\\\"8.2\\\",\\\"8.3\\\",\\\"8.4\\\",\\\"8.5\\\",\\\"8.6\\\",\\\"8.7\\\",\\\"8.8\\\",\\\"8.9\\\",\\\"9.0\\\",\\\"9.1\\\",\\\"9.2\\\",\\\"9.3\\\",\\\"9.4\\\",\\\"9.5\\\",\\\"9.6\\\",\\\"9.7\\\",\\\"9.8\\\",\\\"9.9\\\",\\\"10.0\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"5432103940800811028\\\",\\\"id\\\":\\\"523688131832745273\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"5432103940800811028\\\",\\\"id\\\":\\\"1932163917185879796\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"5432103940800811028\\\",\\\"id\\\":\\\"523688131832745273\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"5432103940800811028\\\",\\\"id\\\":\\\"1932163917185879796\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\")])], Dict{Symbol, Any}(:className => \"field interact-widget\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Scope(Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[\"Y₂\"], Dict{Symbol, Any}(:className => \"interact \", :style => Dict{Any, Any}(:padding => \"5px 10px 0px 10px\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-left\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol, Any}(:max => 100, :min => 1, :attributes => Dict{Any, Any}(:type => \"range\", Symbol(\"data-bind\") => \"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\", \"orient\" => \"horizontal\"), :step => 1, :className => \"slider slider is-fullwidth\", :style => Dict{Any, Any}()))], Dict{Symbol, Any}(:className => \"interact-flex-row-center\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol, Any}(:attributes => Dict(\"data-bind\" => \"text: formatted_val\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-right\"))], Dict{Symbol, Any}(:className => \"interact-flex-row interact-widget\")), Dict{String, Tuple{AbstractObservable, Union{Nothing, Bool}}}(\"changes\" => (Observable(0), nothing), \"index\" => (Observable{Any}(50), nothing)), Set{String}(), nothing, Asset[Asset(\"js\", \"knockout\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout.js\"), Asset(\"js\", \"knockout_punches\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout_punches.js\"), Asset(\"js\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/all.js\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/style.css\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/Interact/PENUy/src/../assets/bulma_confined.min.css\")], Dict{Any, Any}(\"changes\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")], \"index\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\")]), WebIO.ConnectionPool(Channel{Any}(32), Set{AbstractConnection}(), Condition(Base.InvasiveLinkedList{Task}(Task (runnable) @0x0000000287ef1e40, Task (runnable) @0x0000000287ef1e40), Base.AlwaysLockedST(1))), WebIO.JSString[WebIO.JSString(\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"0.1\\\",\\\"0.2\\\",\\\"0.3\\\",\\\"0.4\\\",\\\"0.5\\\",\\\"0.6\\\",\\\"0.7\\\",\\\"0.8\\\",\\\"0.9\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"1.2\\\",\\\"1.3\\\",\\\"1.4\\\",\\\"1.5\\\",\\\"1.6\\\",\\\"1.7\\\",\\\"1.8\\\",\\\"1.9\\\",\\\"2.0\\\",\\\"2.1\\\",\\\"2.2\\\",\\\"2.3\\\",\\\"2.4\\\",\\\"2.5\\\",\\\"2.6\\\",\\\"2.7\\\",\\\"2.8\\\",\\\"2.9\\\",\\\"3.0\\\",\\\"3.1\\\",\\\"3.2\\\",\\\"3.3\\\",\\\"3.4\\\",\\\"3.5\\\",\\\"3.6\\\",\\\"3.7\\\",\\\"3.8\\\",\\\"3.9\\\",\\\"4.0\\\",\\\"4.1\\\",\\\"4.2\\\",\\\"4.3\\\",\\\"4.4\\\",\\\"4.5\\\",\\\"4.6\\\",\\\"4.7\\\",\\\"4.8\\\",\\\"4.9\\\",\\\"5.0\\\",\\\"5.1\\\",\\\"5.2\\\",\\\"5.3\\\",\\\"5.4\\\",\\\"5.5\\\",\\\"5.6\\\",\\\"5.7\\\",\\\"5.8\\\",\\\"5.9\\\",\\\"6.0\\\",\\\"6.1\\\",\\\"6.2\\\",\\\"6.3\\\",\\\"6.4\\\",\\\"6.5\\\",\\\"6.6\\\",\\\"6.7\\\",\\\"6.8\\\",\\\"6.9\\\",\\\"7.0\\\",\\\"7.1\\\",\\\"7.2\\\",\\\"7.3\\\",\\\"7.4\\\",\\\"7.5\\\",\\\"7.6\\\",\\\"7.7\\\",\\\"7.8\\\",\\\"7.9\\\",\\\"8.0\\\",\\\"8.1\\\",\\\"8.2\\\",\\\"8.3\\\",\\\"8.4\\\",\\\"8.5\\\",\\\"8.6\\\",\\\"8.7\\\",\\\"8.8\\\",\\\"8.9\\\",\\\"9.0\\\",\\\"9.1\\\",\\\"9.2\\\",\\\"9.3\\\",\\\"9.4\\\",\\\"9.5\\\",\\\"9.6\\\",\\\"9.7\\\",\\\"9.8\\\",\\\"9.9\\\",\\\"10.0\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"1718417666948007598\\\",\\\"id\\\":\\\"8725565259840982185\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"1718417666948007598\\\",\\\"id\\\":\\\"3511672556481969786\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"1718417666948007598\\\",\\\"id\\\":\\\"8725565259840982185\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"1718417666948007598\\\",\\\"id\\\":\\\"3511672556481969786\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\")])], Dict{Symbol, Any}(:className => \"field interact-widget\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Scope(Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[\"Y₃\"], Dict{Symbol, Any}(:className => \"interact \", :style => Dict{Any, Any}(:padding => \"5px 10px 0px 10px\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-left\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol, Any}(:max => 100, :min => 1, :attributes => Dict{Any, Any}(:type => \"range\", Symbol(\"data-bind\") => \"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\", \"orient\" => \"horizontal\"), :step => 1, :className => \"slider slider is-fullwidth\", :style => Dict{Any, Any}()))], Dict{Symbol, Any}(:className => \"interact-flex-row-center\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol, Any}(:attributes => Dict(\"data-bind\" => \"text: formatted_val\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-right\"))], Dict{Symbol, Any}(:className => \"interact-flex-row interact-widget\")), Dict{String, Tuple{AbstractObservable, Union{Nothing, Bool}}}(\"changes\" => (Observable(0), nothing), \"index\" => (Observable{Any}(50), nothing)), Set{String}(), nothing, Asset[Asset(\"js\", \"knockout\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout.js\"), Asset(\"js\", \"knockout_punches\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout_punches.js\"), Asset(\"js\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/all.js\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/style.css\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/Interact/PENUy/src/../assets/bulma_confined.min.css\")], Dict{Any, Any}(\"changes\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")], \"index\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\")]), WebIO.ConnectionPool(Channel{Any}(32), Set{AbstractConnection}(), Condition(Base.InvasiveLinkedList{Task}(Task (runnable) @0x0000000287f38e70, Task (runnable) @0x0000000287f38e70), Base.AlwaysLockedST(1))), WebIO.JSString[WebIO.JSString(\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"0.1\\\",\\\"0.2\\\",\\\"0.3\\\",\\\"0.4\\\",\\\"0.5\\\",\\\"0.6\\\",\\\"0.7\\\",\\\"0.8\\\",\\\"0.9\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"1.2\\\",\\\"1.3\\\",\\\"1.4\\\",\\\"1.5\\\",\\\"1.6\\\",\\\"1.7\\\",\\\"1.8\\\",\\\"1.9\\\",\\\"2.0\\\",\\\"2.1\\\",\\\"2.2\\\",\\\"2.3\\\",\\\"2.4\\\",\\\"2.5\\\",\\\"2.6\\\",\\\"2.7\\\",\\\"2.8\\\",\\\"2.9\\\",\\\"3.0\\\",\\\"3.1\\\",\\\"3.2\\\",\\\"3.3\\\",\\\"3.4\\\",\\\"3.5\\\",\\\"3.6\\\",\\\"3.7\\\",\\\"3.8\\\",\\\"3.9\\\",\\\"4.0\\\",\\\"4.1\\\",\\\"4.2\\\",\\\"4.3\\\",\\\"4.4\\\",\\\"4.5\\\",\\\"4.6\\\",\\\"4.7\\\",\\\"4.8\\\",\\\"4.9\\\",\\\"5.0\\\",\\\"5.1\\\",\\\"5.2\\\",\\\"5.3\\\",\\\"5.4\\\",\\\"5.5\\\",\\\"5.6\\\",\\\"5.7\\\",\\\"5.8\\\",\\\"5.9\\\",\\\"6.0\\\",\\\"6.1\\\",\\\"6.2\\\",\\\"6.3\\\",\\\"6.4\\\",\\\"6.5\\\",\\\"6.6\\\",\\\"6.7\\\",\\\"6.8\\\",\\\"6.9\\\",\\\"7.0\\\",\\\"7.1\\\",\\\"7.2\\\",\\\"7.3\\\",\\\"7.4\\\",\\\"7.5\\\",\\\"7.6\\\",\\\"7.7\\\",\\\"7.8\\\",\\\"7.9\\\",\\\"8.0\\\",\\\"8.1\\\",\\\"8.2\\\",\\\"8.3\\\",\\\"8.4\\\",\\\"8.5\\\",\\\"8.6\\\",\\\"8.7\\\",\\\"8.8\\\",\\\"8.9\\\",\\\"9.0\\\",\\\"9.1\\\",\\\"9.2\\\",\\\"9.3\\\",\\\"9.4\\\",\\\"9.5\\\",\\\"9.6\\\",\\\"9.7\\\",\\\"9.8\\\",\\\"9.9\\\",\\\"10.0\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"15970815832708533116\\\",\\\"id\\\":\\\"2420044375029248402\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"15970815832708533116\\\",\\\"id\\\":\\\"554882307497398093\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"15970815832708533116\\\",\\\"id\\\":\\\"2420044375029248402\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"15970815832708533116\\\",\\\"id\\\":\\\"554882307497398093\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\")])], Dict{Symbol, Any}(:className => \"field interact-widget\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Scope(Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[\"Y₄\"], Dict{Symbol, Any}(:className => \"interact \", :style => Dict{Any, Any}(:padding => \"5px 10px 0px 10px\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-left\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol, Any}(:max => 100, :min => 1, :attributes => Dict{Any, Any}(:type => \"range\", Symbol(\"data-bind\") => \"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\", \"orient\" => \"horizontal\"), :step => 1, :className => \"slider slider is-fullwidth\", :style => Dict{Any, Any}()))], Dict{Symbol, Any}(:className => \"interact-flex-row-center\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol, Any}(:attributes => Dict(\"data-bind\" => \"text: formatted_val\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-right\"))], Dict{Symbol, Any}(:className => \"interact-flex-row interact-widget\")), Dict{String, Tuple{AbstractObservable, Union{Nothing, Bool}}}(\"changes\" => (Observable(0), nothing), \"index\" => (Observable{Any}(50), nothing)), Set{String}(), nothing, Asset[Asset(\"js\", \"knockout\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout.js\"), Asset(\"js\", \"knockout_punches\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout_punches.js\"), Asset(\"js\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/all.js\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/style.css\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/Interact/PENUy/src/../assets/bulma_confined.min.css\")], Dict{Any, Any}(\"changes\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")], \"index\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\")]), WebIO.ConnectionPool(Channel{Any}(32), Set{AbstractConnection}(), Condition(Base.InvasiveLinkedList{Task}(Task (runnable) @0x000000028a171b60, Task (runnable) @0x000000028a171b60), Base.AlwaysLockedST(1))), WebIO.JSString[WebIO.JSString(\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"0.1\\\",\\\"0.2\\\",\\\"0.3\\\",\\\"0.4\\\",\\\"0.5\\\",\\\"0.6\\\",\\\"0.7\\\",\\\"0.8\\\",\\\"0.9\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"1.2\\\",\\\"1.3\\\",\\\"1.4\\\",\\\"1.5\\\",\\\"1.6\\\",\\\"1.7\\\",\\\"1.8\\\",\\\"1.9\\\",\\\"2.0\\\",\\\"2.1\\\",\\\"2.2\\\",\\\"2.3\\\",\\\"2.4\\\",\\\"2.5\\\",\\\"2.6\\\",\\\"2.7\\\",\\\"2.8\\\",\\\"2.9\\\",\\\"3.0\\\",\\\"3.1\\\",\\\"3.2\\\",\\\"3.3\\\",\\\"3.4\\\",\\\"3.5\\\",\\\"3.6\\\",\\\"3.7\\\",\\\"3.8\\\",\\\"3.9\\\",\\\"4.0\\\",\\\"4.1\\\",\\\"4.2\\\",\\\"4.3\\\",\\\"4.4\\\",\\\"4.5\\\",\\\"4.6\\\",\\\"4.7\\\",\\\"4.8\\\",\\\"4.9\\\",\\\"5.0\\\",\\\"5.1\\\",\\\"5.2\\\",\\\"5.3\\\",\\\"5.4\\\",\\\"5.5\\\",\\\"5.6\\\",\\\"5.7\\\",\\\"5.8\\\",\\\"5.9\\\",\\\"6.0\\\",\\\"6.1\\\",\\\"6.2\\\",\\\"6.3\\\",\\\"6.4\\\",\\\"6.5\\\",\\\"6.6\\\",\\\"6.7\\\",\\\"6.8\\\",\\\"6.9\\\",\\\"7.0\\\",\\\"7.1\\\",\\\"7.2\\\",\\\"7.3\\\",\\\"7.4\\\",\\\"7.5\\\",\\\"7.6\\\",\\\"7.7\\\",\\\"7.8\\\",\\\"7.9\\\",\\\"8.0\\\",\\\"8.1\\\",\\\"8.2\\\",\\\"8.3\\\",\\\"8.4\\\",\\\"8.5\\\",\\\"8.6\\\",\\\"8.7\\\",\\\"8.8\\\",\\\"8.9\\\",\\\"9.0\\\",\\\"9.1\\\",\\\"9.2\\\",\\\"9.3\\\",\\\"9.4\\\",\\\"9.5\\\",\\\"9.6\\\",\\\"9.7\\\",\\\"9.8\\\",\\\"9.9\\\",\\\"10.0\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"3780806694388362671\\\",\\\"id\\\":\\\"16800950861448885590\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"3780806694388362671\\\",\\\"id\\\":\\\"636691891107015737\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"3780806694388362671\\\",\\\"id\\\":\\\"16800950861448885590\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"3780806694388362671\\\",\\\"id\\\":\\\"636691891107015737\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\")])], Dict{Symbol, Any}(:className => \"field interact-widget\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Scope(Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[\"Y₅\"], Dict{Symbol, Any}(:className => \"interact \", :style => Dict{Any, Any}(:padding => \"5px 10px 0px 10px\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-left\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol, Any}(:max => 100, :min => 1, :attributes => Dict{Any, Any}(:type => \"range\", Symbol(\"data-bind\") => \"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\", \"orient\" => \"horizontal\"), :step => 1, :className => \"slider slider is-fullwidth\", :style => Dict{Any, Any}()))], Dict{Symbol, Any}(:className => \"interact-flex-row-center\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol, Any}(:attributes => Dict(\"data-bind\" => \"text: formatted_val\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-right\"))], Dict{Symbol, Any}(:className => \"interact-flex-row interact-widget\")), Dict{String, Tuple{AbstractObservable, Union{Nothing, Bool}}}(\"changes\" => (Observable(0), nothing), \"index\" => (Observable{Any}(50), nothing)), Set{String}(), nothing, Asset[Asset(\"js\", \"knockout\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout.js\"), Asset(\"js\", \"knockout_punches\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout_punches.js\"), Asset(\"js\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/all.js\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/style.css\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/Interact/PENUy/src/../assets/bulma_confined.min.css\")], Dict{Any, Any}(\"changes\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")], \"index\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\")]), WebIO.ConnectionPool(Channel{Any}(32), Set{AbstractConnection}(), Condition(Base.InvasiveLinkedList{Task}(Task (runnable) @0x000000028a557990, Task (runnable) @0x000000028a557990), Base.AlwaysLockedST(1))), WebIO.JSString[WebIO.JSString(\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"0.1\\\",\\\"0.2\\\",\\\"0.3\\\",\\\"0.4\\\",\\\"0.5\\\",\\\"0.6\\\",\\\"0.7\\\",\\\"0.8\\\",\\\"0.9\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"1.2\\\",\\\"1.3\\\",\\\"1.4\\\",\\\"1.5\\\",\\\"1.6\\\",\\\"1.7\\\",\\\"1.8\\\",\\\"1.9\\\",\\\"2.0\\\",\\\"2.1\\\",\\\"2.2\\\",\\\"2.3\\\",\\\"2.4\\\",\\\"2.5\\\",\\\"2.6\\\",\\\"2.7\\\",\\\"2.8\\\",\\\"2.9\\\",\\\"3.0\\\",\\\"3.1\\\",\\\"3.2\\\",\\\"3.3\\\",\\\"3.4\\\",\\\"3.5\\\",\\\"3.6\\\",\\\"3.7\\\",\\\"3.8\\\",\\\"3.9\\\",\\\"4.0\\\",\\\"4.1\\\",\\\"4.2\\\",\\\"4.3\\\",\\\"4.4\\\",\\\"4.5\\\",\\\"4.6\\\",\\\"4.7\\\",\\\"4.8\\\",\\\"4.9\\\",\\\"5.0\\\",\\\"5.1\\\",\\\"5.2\\\",\\\"5.3\\\",\\\"5.4\\\",\\\"5.5\\\",\\\"5.6\\\",\\\"5.7\\\",\\\"5.8\\\",\\\"5.9\\\",\\\"6.0\\\",\\\"6.1\\\",\\\"6.2\\\",\\\"6.3\\\",\\\"6.4\\\",\\\"6.5\\\",\\\"6.6\\\",\\\"6.7\\\",\\\"6.8\\\",\\\"6.9\\\",\\\"7.0\\\",\\\"7.1\\\",\\\"7.2\\\",\\\"7.3\\\",\\\"7.4\\\",\\\"7.5\\\",\\\"7.6\\\",\\\"7.7\\\",\\\"7.8\\\",\\\"7.9\\\",\\\"8.0\\\",\\\"8.1\\\",\\\"8.2\\\",\\\"8.3\\\",\\\"8.4\\\",\\\"8.5\\\",\\\"8.6\\\",\\\"8.7\\\",\\\"8.8\\\",\\\"8.9\\\",\\\"9.0\\\",\\\"9.1\\\",\\\"9.2\\\",\\\"9.3\\\",\\\"9.4\\\",\\\"9.5\\\",\\\"9.6\\\",\\\"9.7\\\",\\\"9.8\\\",\\\"9.9\\\",\\\"10.0\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"6128907041811942585\\\",\\\"id\\\":\\\"15585748669024378077\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"6128907041811942585\\\",\\\"id\\\":\\\"16496876739494999155\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"6128907041811942585\\\",\\\"id\\\":\\\"15585748669024378077\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"6128907041811942585\\\",\\\"id\\\":\\\"16496876739494999155\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\")])], Dict{Symbol, Any}(:className => \"field interact-widget\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Scope(Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[\"Y₆\"], Dict{Symbol, Any}(:className => \"interact \", :style => Dict{Any, Any}(:padding => \"5px 10px 0px 10px\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-left\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol, Any}(:max => 100, :min => 1, :attributes => Dict{Any, Any}(:type => \"range\", Symbol(\"data-bind\") => \"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\", \"orient\" => \"horizontal\"), :step => 1, :className => \"slider slider is-fullwidth\", :style => Dict{Any, Any}()))], Dict{Symbol, Any}(:className => \"interact-flex-row-center\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol, Any}(:attributes => Dict(\"data-bind\" => \"text: formatted_val\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-right\"))], Dict{Symbol, Any}(:className => \"interact-flex-row interact-widget\")), Dict{String, Tuple{AbstractObservable, Union{Nothing, Bool}}}(\"changes\" => (Observable(0), nothing), \"index\" => (Observable{Any}(50), nothing)), Set{String}(), nothing, Asset[Asset(\"js\", \"knockout\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout.js\"), Asset(\"js\", \"knockout_punches\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout_punches.js\"), Asset(\"js\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/all.js\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/style.css\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/Interact/PENUy/src/../assets/bulma_confined.min.css\")], Dict{Any, Any}(\"changes\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")], \"index\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\")]), WebIO.ConnectionPool(Channel{Any}(32), Set{AbstractConnection}(), Condition(Base.InvasiveLinkedList{Task}(Task (runnable) @0x000000028b07ab30, Task (runnable) @0x000000028b07ab30), Base.AlwaysLockedST(1))), WebIO.JSString[WebIO.JSString(\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"0.1\\\",\\\"0.2\\\",\\\"0.3\\\",\\\"0.4\\\",\\\"0.5\\\",\\\"0.6\\\",\\\"0.7\\\",\\\"0.8\\\",\\\"0.9\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"1.2\\\",\\\"1.3\\\",\\\"1.4\\\",\\\"1.5\\\",\\\"1.6\\\",\\\"1.7\\\",\\\"1.8\\\",\\\"1.9\\\",\\\"2.0\\\",\\\"2.1\\\",\\\"2.2\\\",\\\"2.3\\\",\\\"2.4\\\",\\\"2.5\\\",\\\"2.6\\\",\\\"2.7\\\",\\\"2.8\\\",\\\"2.9\\\",\\\"3.0\\\",\\\"3.1\\\",\\\"3.2\\\",\\\"3.3\\\",\\\"3.4\\\",\\\"3.5\\\",\\\"3.6\\\",\\\"3.7\\\",\\\"3.8\\\",\\\"3.9\\\",\\\"4.0\\\",\\\"4.1\\\",\\\"4.2\\\",\\\"4.3\\\",\\\"4.4\\\",\\\"4.5\\\",\\\"4.6\\\",\\\"4.7\\\",\\\"4.8\\\",\\\"4.9\\\",\\\"5.0\\\",\\\"5.1\\\",\\\"5.2\\\",\\\"5.3\\\",\\\"5.4\\\",\\\"5.5\\\",\\\"5.6\\\",\\\"5.7\\\",\\\"5.8\\\",\\\"5.9\\\",\\\"6.0\\\",\\\"6.1\\\",\\\"6.2\\\",\\\"6.3\\\",\\\"6.4\\\",\\\"6.5\\\",\\\"6.6\\\",\\\"6.7\\\",\\\"6.8\\\",\\\"6.9\\\",\\\"7.0\\\",\\\"7.1\\\",\\\"7.2\\\",\\\"7.3\\\",\\\"7.4\\\",\\\"7.5\\\",\\\"7.6\\\",\\\"7.7\\\",\\\"7.8\\\",\\\"7.9\\\",\\\"8.0\\\",\\\"8.1\\\",\\\"8.2\\\",\\\"8.3\\\",\\\"8.4\\\",\\\"8.5\\\",\\\"8.6\\\",\\\"8.7\\\",\\\"8.8\\\",\\\"8.9\\\",\\\"9.0\\\",\\\"9.1\\\",\\\"9.2\\\",\\\"9.3\\\",\\\"9.4\\\",\\\"9.5\\\",\\\"9.6\\\",\\\"9.7\\\",\\\"9.8\\\",\\\"9.9\\\",\\\"10.0\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"7909771970869587988\\\",\\\"id\\\":\\\"16774039972888896363\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"7909771970869587988\\\",\\\"id\\\":\\\"9956793018930867036\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"7909771970869587988\\\",\\\"id\\\":\\\"16774039972888896363\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"7909771970869587988\\\",\\\"id\\\":\\\"9956793018930867036\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\")])], Dict{Symbol, Any}(:className => \"field interact-widget\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Scope(Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[\"Y₇\"], Dict{Symbol, Any}(:className => \"interact \", :style => Dict{Any, Any}(:padding => \"5px 10px 0px 10px\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-left\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol, Any}(:max => 100, :min => 1, :attributes => Dict{Any, Any}(:type => \"range\", Symbol(\"data-bind\") => \"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\", \"orient\" => \"horizontal\"), :step => 1, :className => \"slider slider is-fullwidth\", :style => Dict{Any, Any}()))], Dict{Symbol, Any}(:className => \"interact-flex-row-center\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol, Any}(:attributes => Dict(\"data-bind\" => \"text: formatted_val\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-right\"))], Dict{Symbol, Any}(:className => \"interact-flex-row interact-widget\")), Dict{String, Tuple{AbstractObservable, Union{Nothing, Bool}}}(\"changes\" => (Observable(0), nothing), \"index\" => (Observable{Any}(50), nothing)), Set{String}(), nothing, Asset[Asset(\"js\", \"knockout\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout.js\"), Asset(\"js\", \"knockout_punches\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout_punches.js\"), Asset(\"js\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/all.js\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/style.css\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/Interact/PENUy/src/../assets/bulma_confined.min.css\")], Dict{Any, Any}(\"changes\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")], \"index\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\")]), WebIO.ConnectionPool(Channel{Any}(32), Set{AbstractConnection}(), Condition(Base.InvasiveLinkedList{Task}(Task (runnable) @0x0000000287ee8d00, Task (runnable) @0x0000000287ee8d00), Base.AlwaysLockedST(1))), WebIO.JSString[WebIO.JSString(\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"0.1\\\",\\\"0.2\\\",\\\"0.3\\\",\\\"0.4\\\",\\\"0.5\\\",\\\"0.6\\\",\\\"0.7\\\",\\\"0.8\\\",\\\"0.9\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"1.2\\\",\\\"1.3\\\",\\\"1.4\\\",\\\"1.5\\\",\\\"1.6\\\",\\\"1.7\\\",\\\"1.8\\\",\\\"1.9\\\",\\\"2.0\\\",\\\"2.1\\\",\\\"2.2\\\",\\\"2.3\\\",\\\"2.4\\\",\\\"2.5\\\",\\\"2.6\\\",\\\"2.7\\\",\\\"2.8\\\",\\\"2.9\\\",\\\"3.0\\\",\\\"3.1\\\",\\\"3.2\\\",\\\"3.3\\\",\\\"3.4\\\",\\\"3.5\\\",\\\"3.6\\\",\\\"3.7\\\",\\\"3.8\\\",\\\"3.9\\\",\\\"4.0\\\",\\\"4.1\\\",\\\"4.2\\\",\\\"4.3\\\",\\\"4.4\\\",\\\"4.5\\\",\\\"4.6\\\",\\\"4.7\\\",\\\"4.8\\\",\\\"4.9\\\",\\\"5.0\\\",\\\"5.1\\\",\\\"5.2\\\",\\\"5.3\\\",\\\"5.4\\\",\\\"5.5\\\",\\\"5.6\\\",\\\"5.7\\\",\\\"5.8\\\",\\\"5.9\\\",\\\"6.0\\\",\\\"6.1\\\",\\\"6.2\\\",\\\"6.3\\\",\\\"6.4\\\",\\\"6.5\\\",\\\"6.6\\\",\\\"6.7\\\",\\\"6.8\\\",\\\"6.9\\\",\\\"7.0\\\",\\\"7.1\\\",\\\"7.2\\\",\\\"7.3\\\",\\\"7.4\\\",\\\"7.5\\\",\\\"7.6\\\",\\\"7.7\\\",\\\"7.8\\\",\\\"7.9\\\",\\\"8.0\\\",\\\"8.1\\\",\\\"8.2\\\",\\\"8.3\\\",\\\"8.4\\\",\\\"8.5\\\",\\\"8.6\\\",\\\"8.7\\\",\\\"8.8\\\",\\\"8.9\\\",\\\"9.0\\\",\\\"9.1\\\",\\\"9.2\\\",\\\"9.3\\\",\\\"9.4\\\",\\\"9.5\\\",\\\"9.6\\\",\\\"9.7\\\",\\\"9.8\\\",\\\"9.9\\\",\\\"10.0\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"8740962986163213682\\\",\\\"id\\\":\\\"10158758216819727422\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"8740962986163213682\\\",\\\"id\\\":\\\"16039901869771518637\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"8740962986163213682\\\",\\\"id\\\":\\\"10158758216819727422\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"8740962986163213682\\\",\\\"id\\\":\\\"16039901869771518637\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\")])], Dict{Symbol, Any}(:className => \"field interact-widget\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Scope(Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[\"Y₈\"], Dict{Symbol, Any}(:className => \"interact \", :style => Dict{Any, Any}(:padding => \"5px 10px 0px 10px\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-left\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol, Any}(:max => 100, :min => 1, :attributes => Dict{Any, Any}(:type => \"range\", Symbol(\"data-bind\") => \"numericValue: index, valueUpdate: 'input', event: {change: function (){this.changes(this.changes()+1)}}\", \"orient\" => \"horizontal\"), :step => 1, :className => \"slider slider is-fullwidth\", :style => Dict{Any, Any}()))], Dict{Symbol, Any}(:className => \"interact-flex-row-center\")), Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol, Any}(:attributes => Dict(\"data-bind\" => \"text: formatted_val\")))], Dict{Symbol, Any}(:className => \"interact-flex-row-right\"))], Dict{Symbol, Any}(:className => \"interact-flex-row interact-widget\")), Dict{String, Tuple{AbstractObservable, Union{Nothing, Bool}}}(\"changes\" => (Observable(0), nothing), \"index\" => (Observable{Any}(50), nothing)), Set{String}(), nothing, Asset[Asset(\"js\", \"knockout\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout.js\"), Asset(\"js\", \"knockout_punches\", \"/Users/stevenj/.julia/packages/Knockout/HReiN/src/../assets/knockout_punches.js\"), Asset(\"js\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/all.js\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/InteractBase/Qhvxg/src/../assets/style.css\"), Asset(\"css\", nothing, \"/Users/stevenj/.julia/packages/Interact/PENUy/src/../assets/bulma_confined.min.css\")], Dict{Any, Any}(\"changes\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")], \"index\" => Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"index\\\"]()) ? (this.valueFromJulia[\\\"index\\\"]=true, this.model[\\\"index\\\"](val)) : undefined})\")]), WebIO.ConnectionPool(Channel{Any}(32), Set{AbstractConnection}(), Condition(Base.InvasiveLinkedList{Task}(Task (runnable) @0x0000000287ede290, Task (runnable) @0x0000000287ede290), Base.AlwaysLockedST(1))), WebIO.JSString[WebIO.JSString(\"function () {\\n    var handler = (function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init: function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            });\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            });\\n            ko.applyBindingsToNode(\\n                element,\\n                {\\n                    value: stringified,\\n                    valueUpdate: allBindings.get('valueUpdate'),\\n                },\\n                context,\\n            );\\n        }\\n    };\\n    var json_data = {\\\"formatted_vals\\\":[\\\"0.1\\\",\\\"0.2\\\",\\\"0.3\\\",\\\"0.4\\\",\\\"0.5\\\",\\\"0.6\\\",\\\"0.7\\\",\\\"0.8\\\",\\\"0.9\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"1.2\\\",\\\"1.3\\\",\\\"1.4\\\",\\\"1.5\\\",\\\"1.6\\\",\\\"1.7\\\",\\\"1.8\\\",\\\"1.9\\\",\\\"2.0\\\",\\\"2.1\\\",\\\"2.2\\\",\\\"2.3\\\",\\\"2.4\\\",\\\"2.5\\\",\\\"2.6\\\",\\\"2.7\\\",\\\"2.8\\\",\\\"2.9\\\",\\\"3.0\\\",\\\"3.1\\\",\\\"3.2\\\",\\\"3.3\\\",\\\"3.4\\\",\\\"3.5\\\",\\\"3.6\\\",\\\"3.7\\\",\\\"3.8\\\",\\\"3.9\\\",\\\"4.0\\\",\\\"4.1\\\",\\\"4.2\\\",\\\"4.3\\\",\\\"4.4\\\",\\\"4.5\\\",\\\"4.6\\\",\\\"4.7\\\",\\\"4.8\\\",\\\"4.9\\\",\\\"5.0\\\",\\\"5.1\\\",\\\"5.2\\\",\\\"5.3\\\",\\\"5.4\\\",\\\"5.5\\\",\\\"5.6\\\",\\\"5.7\\\",\\\"5.8\\\",\\\"5.9\\\",\\\"6.0\\\",\\\"6.1\\\",\\\"6.2\\\",\\\"6.3\\\",\\\"6.4\\\",\\\"6.5\\\",\\\"6.6\\\",\\\"6.7\\\",\\\"6.8\\\",\\\"6.9\\\",\\\"7.0\\\",\\\"7.1\\\",\\\"7.2\\\",\\\"7.3\\\",\\\"7.4\\\",\\\"7.5\\\",\\\"7.6\\\",\\\"7.7\\\",\\\"7.8\\\",\\\"7.9\\\",\\\"8.0\\\",\\\"8.1\\\",\\\"8.2\\\",\\\"8.3\\\",\\\"8.4\\\",\\\"8.5\\\",\\\"8.6\\\",\\\"8.7\\\",\\\"8.8\\\",\\\"8.9\\\",\\\"9.0\\\",\\\"9.1\\\",\\\"9.2\\\",\\\"9.3\\\",\\\"9.4\\\",\\\"9.5\\\",\\\"9.6\\\",\\\"9.7\\\",\\\"9.8\\\",\\\"9.9\\\",\\\"10.0\\\"],\\\"changes\\\":WebIO.getval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"4003882290061871992\\\",\\\"id\\\":\\\"11487652428459938951\\\",\\\"type\\\":\\\"observable\\\"}),\\\"index\\\":WebIO.getval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"4003882290061871992\\\",\\\"id\\\":\\\"10134177006576795128\\\",\\\"type\\\":\\\"observable\\\"})};\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"formatted_val\\\"]=ko.computed(    function(){\\n        return this.formatted_vals()[parseInt(this.index())-(1)];\\n    }\\n,this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"4003882290061871992\\\",\\\"id\\\":\\\"11487652428459938951\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"index\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"index\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"index\\\",\\\"scope\\\":\\\"4003882290061871992\\\",\\\"id\\\":\\\"10134177006576795128\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"index\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n);\\n    (WebIO.importBlock({\\\"data\\\":[{\\\"name\\\":\\\"knockout\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/2df50fa7f121fedbb109a97bba894e56aef8c852-knockout.js\\\"},{\\\"name\\\":\\\"knockout_punches\\\",\\\"type\\\":\\\"js\\\",\\\"url\\\":\\\"/assetserver/bb2c111220e03062c2973eb306d97c8fc96857d6-knockout_punches.js\\\"}],\\\"type\\\":\\\"async_block\\\"})).then((imports) => handler.apply(this, imports));\\n}\\n\")])], Dict{Symbol, Any}(:className => \"field interact-widget\")), Observable(Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[MyGraph({6, 8} directed Int64 metagraph with Float64 weights defined by :weight (default weight 1.0))], Dict{Symbol, Any}(:className => \"interact-flex-row interact-widget\")))], Dict{Symbol, Any}())"
      ]
     },
     "execution_count": 42,
     "metadata": {
      "application/vnd.webio.node+json": {
       "kernelId": "8a9fe2d3-11ba-493f-9228-1ded0ad827a7"
      }
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "@manipulate for Y₁=0.1:0.1:10,\n",
    "                Y₂=0.1:0.1:10,\n",
    "                Y₃=0.1:0.1:10,\n",
    "                Y₄=0.1:0.1:10,\n",
    "                Y₅=0.1:0.1:10,\n",
    "                Y₆=0.1:0.1:10,\n",
    "                Y₇=0.1:0.1:10,\n",
    "                Y₈=0.1:0.1:10\n",
    "    s = [1,-1,0,0,0,0]\n",
    "    Y = diagm(0=>[Y₁,Y₂,Y₃,Y₄,Y₅,Y₆,Y₇,Y₈])\n",
    "    nodecolors!(labels(g, edges=[subchar(\"i_$j = $i\") for (j,i) in enumerate(twodigits.(Y*A*(pinv(A'*Y*A) * s)))]),\n",
    "                [1,2])\n",
    "end"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notice that if we make the admittance $Y_2$ really large compared to all of the other admittances, then nearly all of the current should flow just over that one edge.   Conversely, if we make $Y_2$ really *small*, it is almost like \"cutting\" that wire: almost all of the current should flow through the *other* edges.\n",
    "\n",
    "Hooray, math (and physics) works!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Sparsity\n",
    "\n",
    "The case of matrices arising from graphs illustrates another point that I've made many times: **really large matrices are often sparse (mostly 0)** in practice.\n",
    "\n",
    "For example, imagine a circuit with a million nodes.  For the most part, there will only be *wires between nearby nodes*.  Or imagine a graph where the nodes are websites and the edges are links: there are billions of sites, but *each site only links to a few other sites* (a few hundred at most, usually).   In such cases, the **incidence matrix is mostly zero**, and similarly for $A^T Y A$ etcetetera.\n",
    "\n",
    "This is hugely important, because solving $Ax=b$ and most other matrix equations scale as $\\sim n^3$ for $n \\times n$ matrices.  $1000 \\times 1000$ matrices are easy (< 1 second), but $n=10^6$ would require supercomputers, and $n=10^9$ would be impossibly hard.   What saves us is that there are **much faster algorithms for sparse matrices**.  We won't learn much about such algorithms in 18.06, but the key point is to know that they exist.\n",
    "\n",
    "If you encounter a large sparse matrix problem in the future, go read about sparse matrix algorithms!"
   ]
  }
 ],
 "metadata": {
  "@webio": {
   "lastCommId": "124bc382b0be4e3f8fe62e6f2805cf54",
   "lastKernelId": "8a9fe2d3-11ba-493f-9228-1ded0ad827a7"
  },
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Julia 1.8.3",
   "language": "julia",
   "name": "julia-1.8"
  },
  "language_info": {
   "file_extension": ".jl",
   "mimetype": "application/julia",
   "name": "julia",
   "version": "1.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
